图像处理开发需求、图像处理接私活挣零花钱,请加微信/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