一、实验代码
#include<opencv2/opencv.hpp>
#include<vector>
using namespace cv;
using namespace std;
int main(){
Mat scrImage,dstImage;//输入图像、输出图像、显示图像
Point2f scrTriangle[3];
Point2f dstTriangle[3];
Mat WarpMat(2,3,CV_32FC1);//变换矩阵
scrImage = imread("lm.jpg");
if (!scrImage.data){ printf("读取图片错误。\n"); return false; }
scrTriangle[0] = Point2f(0, 0);
scrTriangle[1] = Point2f(static_cast<float>(scrImage.cols - 1), 0);
scrTriangle[2] = Point2f(0, static_cast<float>(scrImage.rows - 1));
dstTriangle[0] = Point(static_cast<float>(scrImage.cols*0.1), static_cast<float>(scrImage.rows*0.8));
dstTriangle[1] = Point(static_cast<float>(scrImage.cols*0.9), static_cast<float>(scrImage.rows*0.1));
dstTriangle[2] = Point(static_cast<float>(scrImage.cols*0.3), static_cast<float>(scrImage.rows*0.2));
WarpMat = getAffineTransform(scrTriangle, dstTriangle);
dstImage.create(scrImage.size(), scrImage.type());
warpAffine(scrImage, dstImage, WarpMat, dstImage.size());//仿射变换
imshow("变换1", dstImage);
waitKey(6000);
return 0;
}
二、效果之一
运行程序,只见图片已翻转,但大部分超出了图像范围无法显示出来。
三、改进
学习变换矩阵的原理
一个坐标通过函数变换的新的坐标位置:
[x′y′]=[A11</