图像旋转的含义这里就不说了。
说下仿射变换的含义,仿射变换实际上是一种线性变换,通过这种变换,可以实现图像的平移、缩放、翻转、旋转、剪切等操作。
在OpenCV中可以通过函数getRotationMatrix2D和函数warpAffine的联合使用,对图像进行任意角度的旋转。使用方法如下:
先根据旋转参数,由函数getRotationMatrix2D计算出仿射变换矩阵,然后再将仿射变换矩阵代入仿射变换函数warpAffine中实现图像的旋转变换。
代码如下:
图像处理开发资料、图像处理开发需求、图像处理接私活挣零花钱,可以搜索公众号"qxsf321",并关注!
代码中用到的图像下载链接:http://pan.baidu.com/s/1pKXP8BD 密码:fw4e
//opencv版本:OpenCV3.0
//VS版本:VS2013
//Author:qxsf321.net
#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;
}
运行结果如下图所示: