0006-用OpenCV的仿射變換函式warpAffine實現影象的任意角度旋轉!
阿新 • • 發佈:2018-11-14
影象旋轉的含義這裡就不說了。
說下仿射變換的含義,仿射變換實際上是一種線性變換,通過這種變換,可以實現影象的平移、縮放、翻轉、旋轉、剪下等操作。
在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; }
執行結果如下圖所示: