700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > OpenCV下三对点计算仿射变换实现图像的水平镜像(翻转)的详细说明和源程序

OpenCV下三对点计算仿射变换实现图像的水平镜像(翻转)的详细说明和源程序

时间:2019-07-25 05:06:45

相关推荐

OpenCV下三对点计算仿射变换实现图像的水平镜像(翻转)的详细说明和源程序

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

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

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

所以,作图像的仿射变换的关键是要计算出仿射变换矩阵,仿射变换是一个2*3的矩阵,仿射变换矩阵的人工计算方法可以参考书籍【精通MATLAB数字图像处理(下载链接:百度网盘-链接不存在 密码:j61d)】第四章的方法

在OpenCV中,可以用源图像与目标图像的三对点计算出仿射变换矩阵,使用函数getAffineTransform()便可以实现这个计算!具体的实际上就是指出源图像中

下面给一段我自己写的源代码,功能是用仿射变换实现图像的水平镜像(翻转),

图像处理开发资料、图像处理开发需求、图像处理接私活挣零花钱,可以搜索公众号"qxsf321",并关注!

源码中用到的图像的下载链接为:sea.jpg_免费高速下载|百度网盘-分享无限制

//opencv版本:OpenCV3.0//VS版本:VS//Author:#include <opencv2/imgproc/imgproc.hpp> #include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/types_c.h> #include <iostream>int main(){cv::Mat image = cv::imread("lena.jpg");if (image.empty()){std::cout << "read image failure" << std::endl;return -1;}cv::Point2f center = cv::Point2f(image.cols / 2, image.rows / 2); // 旋转中心 double angle = 30; // 旋转角度 double scale = 0.5; // 缩放尺度 cv::Mat rotateMat;rotateMat = cv::getRotationMatrix2D(center, angle, scale);//rotateMat为计算出的仿射变换矩阵cv::Mat rotateImg;cv::warpAffine(image, rotateImg, rotateMat, image.size());cv::imshow("Image", image);cv::imshow("rotateImg", rotateImg);cv::waitKey(0);return 0;}

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

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

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

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