影像幾何變換是將一幅影像的座標位置,映射到新座標位置,這種幾何變換不改變像素值,只是在平面上進行像素位置的重新安排,OpenCV提供remap()來進行幾何轉換,分以下兩部分:
- 對想要進行的空間變換,像垂直、水平鏡射,製作一個映射表,映射表是一個和輸入圖尺寸相同的影像,值代表影像每個像素的新位置。
- 在我們進行映射轉換時,輸出圖的像素可能映射到輸入圖的非整數座標上,此時由輸入參數,決定如何計算。
OpenCV的remap()函式需要輸入mapx和mapy兩個影像,這兩個影像尺寸和輸入圖相同,分別表示新的x和y的位置,假設dst是輸出圖,則dst(x,y) = src(mapx(x,y) , mapy(x,y))。
OpenCV重映射
void remap(InputArray src, OutputArray dst, InputArray map1, InputArray map2, int interpolation, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())
- src:輸入圖。
- dst:輸出圖,型態和輸入圖相同。
- map1:第一個輸入的映射表,型態可為CV_16SC2、CV_32FC1或CV_32FC2,尺寸和輸入圖相同,映射表的值代表的是輸入圖此像素位置要轉移去的新x座標。
- map2:第二個輸入的映射表,型態可為CV_16UC1或 CV_32FC1,尺寸和輸入圖相同,映射表的值代表的是輸入圖此像素位置要轉移去的新y座標。。
- interpolation:內插型態。
- borderMode:邊界模式,預設為BORDER_CONSTANT。
- borderValue:邊界外推值,預設強度為0。
以下示範remap()的用法,讓輸入圖進行左右或上下的顛倒,依據想要進行的操作,先給map_x和map_y影像像素賦值,再呼叫remap()即可將輸入圖進行想要的轉換: