OpenCV探索之路(八) 重對映與仿射變換

2021-09-08 12:50:24 字數 2703 閱讀 4610

重對映

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

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

其中的 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 **ar**)

waitkey(0);

return 0;

}

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

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

OpenCV探索之路(八) 重對映與仿射變換

重對映 重對映就是把一幅影象中某個位置的畫素放置到另乙個中指定位置的過程。用乙個數學公式來表示就是 其中的 f 就是對映方式,也就說,畫素點在另乙個影象中的位置是由 f 來計算的。在opencv中,用的是remap函式實現重對映。基本重對映 include include include inclu...

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 存放呼叫函式之後的運算結果...

opencv 重對映與仿射變換

重對映 重對映就是把一幅影象中某個位置的畫素放置到另乙個中指定位置的過程。用乙個數學公式來表示就是 其中的 f 就是對映方式,也就說,畫素點在另乙個影象中的位置是由 f 來計算的。在opencv中,用的是remap函式實現重對映。基本重對映 include include include inclu...