0006-用OpenCV的仿射变换函数warpAffine实现图像的任意角度旋转!

图像旋转的含义这里就不说了。

说下仿射变换的含义,仿射变换实际上是一种线性变换,通过这种变换,可以实现图像的平移、缩放、翻转、旋转、剪切等操作。

在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;
}


运行结果如下图所示


 

猜你喜欢

转载自blog.csdn.net/lehuoziyuan/article/details/84030324
今日推荐