重映射
Posted fpzs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重映射相关的知识,希望对你有一定的参考价值。
重映射
重映射就是把一幅图像中某个位置的像素放置到另一个图片中指定位置的过程。
用一个数学公式来表示就是:
其中的 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> 6 using 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提供)。
运行结果
以上是关于重映射的主要内容,如果未能解决你的问题,请参考以下文章