opencv 重對映與仿射變換

2021-08-21 15:56:27 字數 2703 閱讀 3461

重對映

重對映就是把一幅影象中某個位置的畫素放置到另乙個中指定位置的過程。

用乙個數學公式來表示就是:

其中的 f 就是對映方式,也就說,畫素點在另乙個影象中的位置是由 f 來計算的。

在opencv中,用的是remap函式實現重對映。

基本重對映

#include #include #include #include using namespace cv;

using namespace std;

//基本重對映實驗

int main()

imshow("src pic", srcimage);

mat dstimage, map_x, map_y;

dstimage.create(srcimage.size(), srcimage.type());//建立和原圖一樣的效果圖

map_x.create(srcimage.size(), cv_32fc1);

map_y.create(srcimage.size(), cv_32fc1);

//遍歷每乙個畫素點,改變map_x & map_y的值,實現翻轉180度

for (int j = 0; j < srcimage.rows; j++)

}//進行重對映操作

remap(srcimage, dstimage, map_x, map_y, inter_linear, border_constant, scalar(0, 0, 0));

imshow("重對映效果圖", dstimage);

waitkey();

return 0;

}

map_x與map_y分別代表目標圖中的(x,y)點在原圖中的x座標(由map_x提供)與y座標(由map_y提供)。

執行效果,影象翻轉了。

仿射變換

仿射變換指的是乙個向量空間進行一次線性變換並接上乙個平移,變換為另乙個向量空間的過程。

影象進行仿射變換後,有以下幾個特點:

二維圖形之間的相對位置關係保持不變,平行線依舊是平行線,且直線上的點的位置順序保持不變。

乙個任意的仿射變換都可以表示為乘以乙個矩陣(線性變換)接著再加上乙個向量(平移)的形式。

三種常見形式:

仿射變換本質是乙個2* 3的矩陣m乘上原圖的每個座標,得到目標圖的對應點座標。2*3矩陣m中的2表示目標點座標的x與y,3中的第三維是平移分量。因此需要做的就是找到矩陣m,opencv提供 getaffinetransform 求出仿射變換, getrotationmatrix2d 來獲得旋轉矩陣。

這裡簡單說說仿射變換是怎麼做到的。

現在有兩幅影象(如下圖),影象二是影象一經過放射變化得來的。那問題來了,我們怎麼從這兩個影象資訊裡挖掘出兩圖之間的對映關係?

很簡單,只要在影象一種拿出三個點(1,2,3),影象二也拿出對應的三個點(1,2,3),就可以求出兩圖間的對映關係!

opencv通過兩個函式的組合使用來實現仿射變換:

#include#include#includeusing namespace std;

using namespace cv;

//仿射變換實驗

int main()

兩種仿射變換的效果如下。

warpaffine(dst_warp, dst_warprotatescale, m2, src.size(), 1, 0, scalar(11,111, 211));//利用scalar來填充不同顏色背景
然後背景色就變成這樣子了:

最後寫乙個對旋轉任何角度的**。

#include #include #include #include using namespace cv;

using namespace std;

#define pic_begin_num 100 //這裡定義你的起始編號

#define angle_start -45 //旋轉角度的開始

#define angle_end 0 //旋轉角度的結束

#define angle_step 2 //旋轉角度步長

int main(int argc, char **argv)

waitkey(0);

return 0;

}

這裡的**實現對旋轉2度、4度...45度的功能,並將這些旋轉後的影象儲存先來。

然後資料夾下就出現旋轉好的了!

OpenCV 重對映 仿射變換

通過重對映來表達每個畫素的位置 x,y g x,y f h x,y 這裡 g 是目標影象,f 是源影象,h x,y 是作用於 x,y 的對映方法函式.想象一下我們有乙個影象 i 我們想滿足下面的條件作重對映 h x,y i.cols x,y 影象會按照 x 軸方向發生翻轉.map x.create ...

OpenCV學習記錄3 仿射變換與重對映

在影象處理中,發現很多書都會將幾何變換分為重對映 仿射變換與透視變換。對於透視變換不是理解得和透徹,所以先總結一下重對映與放射變換。重對映就是 事實上,對映分為向前對映和向後對映,將輸入對映到輸出的是向前對映,反之就是向後對映,那remap是哪一種呢?下面是檢驗的 mat dst,map x,map...

opencv3 7 3 重對映 仿射變換

將一幅影象某位置的畫素放置到另外一幅影象的指定位置上,需要對非整數畫素座標重對映來表達每個畫素的新位置。g x,y f h x,y dst x,y src map1 x,y map2 x,y remap函式原型和引數 引數1 mat src 源影象 引數2 mat dst 存放呼叫函式之後的運算結果...