通過重對映來表達每個畫素的位置這裡2
34
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) );
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 來獲得旋轉矩陣。 123
4567
89
1011
1213
1415
1617
1819
2021
2223
2425
2627
2829
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() );
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 重對映 仿射變換
通過重對映來表達每個畫素的位置 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 重對映與仿射變換
重對映 重對映就是把一幅影象中某個位置的畫素放置到另乙個中指定位置的過程。用乙個數學公式來表示就是 其中的 f 就是對映方式,也就說,畫素點在另乙個影象中的位置是由 f 來計算的。在opencv中,用的是remap函式實現重對映。基本重對映 include include include inclu...