1. 程式人生 > >0006-用OpenCV的仿射變換函式warpAffine實現影象的任意角度旋轉!

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


執行結果如下圖所示