本章我將為大家介紹opencv中的畫素重對映操作。
簡單點說就是把輸入影象中各個畫素按照一定的規則對映到另外一張影象的對應位置上去,形成一張新的影象。
// 輸入影象
outputarray dst,
// 輸出影象
inputarray map1,
// x 對映表 cv_32fc1/cv_32fc2
inputarray map2,
// y 對映表
int interpolation,
// 選擇的插值方法,常見線性插值,可選擇立方等
int bordermode,
// border_constant
const scalar bordervalue// color
)
#include
#include
using
namespace cv;
using
namespace std;
mat src, dst, map_x, map_y;
const
char
* output_title =
"remap demo"
;int index =0;
void
update_map
(void);
//更新畫素對映模式
intmain
(int argc,
char
** ar**)
char input_win=
"input image"
;namedwindow
(input_win, cv_window_autosize)
;namedwindow
(output_title, cv_window_autosize)
;imshow
(input_win, src)
; map_x.
create
(src.
size()
, cv_32fc1)
;//建立x方向的對映影象元素,型別為32(32位)f(float)c1(一通道)
map_y.
create
(src.
size()
, cv_32fc1)
;//建立y方向的對映影象元素,型別為32(32位)f(float)c1(一通道)
int c =0;
while
(true
) index = c %4;
//判斷c的ascii值
update_map()
;remap
(src, dst, map_x, map_y, inter_linear, border_constant,
scalar(0
,255
,255))
;//影象重對映,x,y方向的對映影象分別為map_x, map_y,對映方式為inter_linear,邊界填充方式為border_constant,邊界填充顏色為0,255,255
imshow
(output_title, dst);}
return0;
}void
update_map
(void
)else
break
;case1:
//影象左右翻轉
map_x.at<
float
>
(row, col)
=(src.cols-col-1)
;//減一是因為col從0開始取值
map_y.at<
float
>
(row, col)
= row;
break
;case2:
//影象上下翻轉
map_x.at<
float
>
(row, col)
= col;
map_y.at<
float
>
(row, col)
=(src.rows-row-1)
;break
;case3:
//影象上下左右翻轉
map_x.at<
float
>
(row, col)
=(src.cols - col -1)
; map_y.at<
float
>
(row, col)
=(src.rows - row -1)
;break;}}}}
執行效果:
openCv之畫素重對映
畫素重對映的簡單變換知識 備註 1.在上圖a中,縮小一半放在中心可理解為 在乙個4x4的矩陣中,只在中間兩格區域內填畫素,並且,中間部分畫素採用隔乙個格仔取乙個畫素,既如果原來畫素座標取為 1,1 1,2 1,3 dst的畫素則變成 1,1 1,3 1,5 1,2n 1 2.很多網上例程說a後面加0...
OpenCV17 畫素重對映
簡單點說就是把輸入影象中各個畫素按照一定的規則對映到另外一張影象的對應位置上去,形成一張新的影象。remap inputarray src,輸入影象 outputarray dst,輸出影象 inputarray map1,x 對映表 cv 32fc1 cv 32fc2 inputarray map...
opencv學習筆記 二 操作畫素
第二章 操作畫素 2.1引言 灰度影象畫素由8位無符號數來表示,0表示黑色,255表示白色。彩色影象 rgb 畫素由三個8位的無符號數來表示,儲存方式為三元數 b,g,r 2.2訪問畫素值 mat類有若干成員和成員函式來獲取影象的屬性 成員cols和rows表示 寬和高 列和行 成員函式 at 畫素...