今天第一次接觸到opencv重映射:remap( ),之前都是自己手動計算轉換坐標。小小記錄一下。
圖像的坐標映射是通過原圖像與目標圖像之間建立一種映射關系,這種映射關系有兩種,一種是計算原圖像任意像素在映射後圖像的坐標位置,另一種是計算變換後圖像任意像素反映射在原圖像的坐標位置。
opencv中提供重映射等操作,其中重映射就是把一幅圖像中某位置的像素放置到另一個圖片指定位置的過程。為瞭完成映射過程,需要獲得一些插值為非整數像素的坐標。
1、remap()函數
函數remap使用指定的映射轉換源圖像。
Void remap(InputArray src, // 源圖像
OutputArray dst, // 目標圖像
InputArray map1, // 第一個映射 ,x坐標
InputArray map2, // 第二個映射 ,y坐標
int interpolation, // 表示插值方法
int borderMode=BORDER_CONSTANT, // 表示邊界插值類型
const Scalar&borderValue=Scalar()) // 表示插值數值
map1和map2:代表目標圖中的(x,y)點在原圖像的x坐標和y坐標;
需要說明的是,map1和map2的值都是浮點數。因此,目標圖像可以映射回一個非整數的值,這意味著目標圖像可以「反向映射」到原始圖像中兩個像素點之間的位置(當 然,該位置是不存在像素值的)。這時,可以采用不同的方法實現插值,函數中的interpolation 參數可以控制插值方式。
參考文獻
原文1鏈接:[OpenCV] cv.remap() 重映射學習筆記/map1 map2易混點
原文2鏈接:OpenCV學習筆記(十四):重映射:remap( )