版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/love_image_xie/article/details/87283384
int main()
{
cv::Mat srcImage = cv::imread("E:\\研究生\\学习材料\\学习书籍\\OpenCV图像处理编程实例-源码-20160801\\《OpenCV图像处理编程实例-源码-20160801\\images\\hand1.jpg");
if (!srcImage.data)
return -1;
cv::imshow("srcImage", srcImage);
int nRows = srcImage.rows;
int nCols = srcImage.cols;
cout << "srcRows: " <<nRows<<endl;
cout << "srcCols: " << nCols << endl;
//定义仿射变换的二维点数组
//源图像和目标图像对应映射的三点
cv::Point2f srcPoint[3];
cv::Point2f resPoint[3];
srcPoint[0] = cv::Point2f(0, 0);
srcPoint[1] = cv::Point2f(nCols - 1, 0);
srcPoint[2] = cv::Point2f(0, nRows - 1);
resPoint[0] = cv::Point2f(nCols * 0, nRows*0.33);
resPoint[1] = cv::Point2f(nCols*0.85, nRows*0.25);
resPoint[2] = cv::Point2f(nCols*0.15, nRows*0.7);
// 定义仿射变换矩阵2X3
cv::Mat warpMat(cv::Size(2, 3), CV_32F);
cv::Mat resultImage =
cv::Mat::zeros(nRows, nCols, srcImage.type());
// 计算仿射变换矩阵,即仿射变换的2*3数组
warpMat = cv::getAffineTransform(srcPoint, resPoint);
cout << "warpMat1: " << warpMat << endl;
// 根据仿射矩阵计算图像仿射变换
cv::warpAffine(srcImage, resultImage,
warpMat, resultImage.size());
cv::imshow("resultImage1", resultImage);
// 仿射变换参数设置
cv::Point2f centerPoint = cv::Point2f(nCols / 2, nRows / 2);
double angle = -50;
double scale = 0.7;
// 获取仿射变换矩阵
warpMat = getRotationMatrix2D(centerPoint, angle, scale);
cout << "warpMat2: " << warpMat << endl;
// 对原图像角度仿射变换
cv::warpAffine(srcImage, resultImage,
warpMat, resultImage.size());
cv::imshow("resultImage2", resultImage);
cv::waitKey(0);
}