700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > OpenCV3.x下利用仿射变换实现图像水平镜像(翻转)的C++代码

OpenCV3.x下利用仿射变换实现图像水平镜像(翻转)的C++代码

时间:2023-03-18 06:21:50

相关推荐

OpenCV3.x下利用仿射变换实现图像水平镜像(翻转)的C++代码

图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782

图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601

图像的仿射变换是指在直角坐标系中将一个二维坐标转换到另外一个二维坐标的过程,仿射变换是一种线性变换,所以可以用矩阵的运算来表示仿射变换,仿射变换主要用来实现平移、缩放、翻转、旋转及剪切等相关几何操作。

作图像的仿射变换的关键是要计算出仿射变换矩阵,仿射变换是一个2*3的矩阵,仿射变换矩阵的计算方法可以参考书籍《精通MATLAB数字图像处理》第四章。(本书PDF下载链接:/s/16mDrgAn0K4zM3lnAfgiRDQ

提取码:d4ja)

在OpenCV中,可以使用函数getAffineTransform()来计算仿射变换矩阵,函数getAffineTransform()利用原图像和目标图像的三组对应点来计算仿射变换矩阵。

源码中用到的图片的下载链接:/s/1dEEP10t

//OpenCV版本2.4.9//作者微信/QQ 2487872782//有问题可以联系作者交流#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> int main(){// 读取图像及验证读入正确cv::Mat srcImage = cv::imread("sea.jpg");if(!srcImage.data) return -1;cv::imshow("srcImage", srcImage);int nRows = srcImage.rows;int nCols = srcImage.cols;//定义仿射变换的二维点数组//源图像和目标图像对应映射的三点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-1,0 );resPoint[1] = cv::Point2f(0, 0);resPoint[2] = cv::Point2f(nCols-1,nRows-1);// 定义仿射变换矩阵2X3cv::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); // 根据仿射矩阵计算图像仿射变换cv::warpAffine(srcImage, resultImage,warpMat, resultImage.size());cv::imshow("作仿射变换后的图像",resultImage);cv::waitKey(0);}

程序运行结果如下图所示:

图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782

图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。