OpenCV 重對映 仿射變換

2021-08-13 10:55:46 字數 1960 閱讀 5969

通過重對映來表達每個畫素的位置 (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( src.size(), cv_32fc1 );

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

/* 計算map_x與map_y */

remap( src, dst, map_x, map_y, cv_inter_linear, border_constant, scalar(0,0, 0) );

src: 源影象

dst: 目標影象,與 src 相同大小

map_x: x方向的對映引數. 它相當於方法 h(i,j) 的第乙個引數

map_y: y方向的對映引數. 注意 map_y 和 map_x 與 src 的大小一致。

cv_inter_linear: 非整數畫素座標插值標誌. 這裡給出的是預設值(雙線性插值).

border_constant: 預設

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 來獲得旋轉矩陣。

point2f srctri[3];

point2f dsttri[3];

mat rot_mat( 2, 3, cv_32fc1 );

mat warp_mat( 2, 3, cv_32fc1 );

mat src, warp_dst, warp_rotate_dst;

// 1. 找到對應點:原點+目標點

srctri[0] = point2f( 0,0 );

srctri[1] = point2f( src.cols - 1, 0 );

srctri[2] = point2f( 0, src.rows - 1 );

dsttri[0] = point2f( src.cols*0.0, src.rows*0.33 );

dsttri[1] = point2f( src.cols*0.85, src.rows*0.25 );

dsttri[2] = point2f( src.cols*0.15, src.rows*0.7 );

// 2. 獲得用以描述仿射變換的 2 x 3 矩陣 (在這裡是 warp_mat)

warp_mat = getaffinetransform( srctri, dsttri );

// 3. 將剛剛求得的仿射變換應用到源影象

warpaffine( src, warp_dst, warp_mat, warp_dst.size() );

// 1. 設定旋轉引數

point center = point( warp_dst.cols/2, warp_dst.rows/2 );//旋轉影象所要圍繞的中心

double angle = -50.0;// 旋轉的角度. 在opencv中正角度是逆時針的

double scale = 0.6;//可選擇: 縮放因子

// 2. 獲得旋轉矩陣, 這個函式返回乙個 2 x 3 矩陣 (這裡是 rot_mat)

rot_mat = getrotationmatrix2d( center, angle, scale );

// 3. 對映輸出

warpaffine( warp_dst, warp_rotate_dst, rot_mat, warp_dst.size() );

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學習記錄3 仿射變換與重對映

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