OpenCV中提供重映射想换操作,重映射是指把一个图像中一个位置的像素通过映射关系转到另一图像指定位置。
//remap重映射
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\core\core.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<iostream>
using namespace std;
int main(){
cv::Mat srcimage = cv::imread("C:\\Users\\DELL\\Desktop\\五花肉.jpg");
if (srcimage.empty())
return -1;
//输出矩阵定义
cv::Mat resultimage(srcimage.size(), srcimage.type());
//x与y方向矩阵
cv::Mat xmapimage(srcimage.size(), CV_32FC1);
cv::Mat ymapimage(srcimage.size(), CV_32FC1);
//取图像的宽高
int rows = srcimage.rows;
int cols = srcimage.cols;
//图像遍历
for (int j = 0; j < rows; j++){
for (int i = 0; i < cols; i++){
//x与y均翻转
xmapimage.at<float>(j, i) = cols - i;
ymapimage.at<float>(j, i) = rows - j;
}
}
//重映射操作
remap(srcimage, resultimage, xmapimage, ymapimage, CV_INTER_LINEAR, cv::BORDER_CONSTANT, cv::Scalar(0, 0, 0));
//输出结果
cv::imshow("srcimage", srcimage);
cv::imshow("resuleimage", resultimage);
cv::waitKey(0);
system("pause");
return 0;
}
void remap(inputarray src ,outputarray dst,inputarray map1,inputarray map2,int interpolation,int borderMode=BORDER_CONSTANT,const scalar&borderValue=scalar())
函数解析:map1表示(x,y)点的坐标或x的坐标,;map2表示y的坐标;interpolation表示插值方法;borderMode表示边界插值类型;borderValue表示插值数值。