重映射remap()
重映射实例(多重映射见书304,其实就是调用子函数的swtich语句,更改map_x,map_y的值来改变重映射形式)
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat srcimg, dstimg;
Mat map_x, map_y;
//载入原图
srcimg = imread("D://1.jpg", 1);
imshow("原始图", srcimg);
//创建与原图一样的效果图,x,y重映射图
dstimg.create(srcimg.size(), srcimg.type());
map_x.create(srcimg.size(), CV_32FC1);
map_y.create(srcimg.size(), CV_32FC1);
for (int j = 0; j < srcimg.rows; j++)
{
for (int i = 0; i < srcimg.cols; i++)
{
//改变map_x,map_y的值
map_x.at<float>(j, i) = static_cast<float>(i);
map_y.at<float>(j, i) = static_cast<float>(srcimg.rows-j);
}
}
//进行重映射操作
remap(srcimg, dstimg, map_x, map_y, INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 0, 0));
//显示效果图
imshow("【程序窗口】", dstimg);
waitKey();
return 0;
}
仿射变换
实质就是先用getRotationMatrix2D()或getAffineTransform函数求得仿射变换矩阵,然后用进行仿射变换