重映射
阿新 • • 發佈:2018-09-25
float cimage 每一個 實現 imread 放置 iostream () ret
重映射
重映射就是把一幅圖像中某個位置的像素放置到另一個圖片中指定位置的過程。
用一個數學公式來表示就是:
其中的 f 就是映射方式,也就說,像素點在另一個圖像中的位置是由 f 來計算的。
在OpenCV中,用的是remap函數實現重映射。
基本重映射
1 #include <opencv2/opencv.hpp> 2 #include <opencv2/core/core.hpp> 3 #include <opencv2/highgui/highgui.hpp> 4 #include<iostream> 5 #include<stdlib.h> 6using namespace cv; 7 using namespace std; 8 int main() 9 { 10 Mat srcImage,dstImage; 11 Mat map_x,map_y; 12 srcImage=imread("E:\\lena.jpg"); 13 imshow("srcImage",srcImage); 14 //創建和原始圖一樣的效果圖,X重映射圖,Y重映射圖 15 dstImage.create(srcImage.size(),srcImage.type()); 16 map_x.create(srcImage.size(),CV_32FC1);17 map_y.create(srcImage.size(),CV_32FC1); 18 //雙層循環,遍歷每一個像素點,改變map_x,map_y的值 19 for(int j=0;j<srcImage.rows;j++) 20 { 21 for(int i=0;i<srcImage.cols;i++) 22 { 23 map_x.at<float>(j,i)=static_cast<float>(i); 24 map_y.at<float>(j,i)=static_cast<float>(srcImage.rows-j); 25 } 26 } 27 //進行重映射操作 28 remap(srcImage,dstImage,map_x,map_y,INTER_LINEAR,BORDER_CONSTANT,Scalar(0,0,0)); 29 imshow("cxck",dstImage); 30 waitKey(); 31 return 0; 32 33 }
map_x與map_y分別代表目標圖中的(x,y)點在原圖中的x坐標(由map_x提供)與y坐標(由map_y提供)。
運行結果
重映射