OpenCV官方文檔學習記錄(20)

來源:互聯網
上載者:User

標籤:style   blog   http   ar   io   color   os   sp   for   

2D仿射變換(AffineTransform)

主要函數:

//擷取變換矩陣M=[A B]    warp_mat = getAffineTransform(srcTri, dstTri);
//擷取旋轉矩陣    rot_mat = getRotationMatrix2D(center, angle, scale);

重要函數:

warpAffine(src, warp_dst, warp_mat, warp_dst.size());

 

代碼如下,解釋全在注釋中:

 1 #include <opencv2\opencv.hpp> 2 #include <iostream> 3 #include <string> 4  5 #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) 6  7 using namespace std; 8 using namespace cv; 9 10 void showImg(const string &win_name, const Mat &img)11 {12     namedWindow(win_name, CV_WINDOW_AUTOSIZE);13     imshow(win_name, img);14 }15 16 int main(void)17 {18     Point2f srcTri[3];19     Point2f dstTri[3];20 21     Mat rot_mat(2, 3, CV_32FC1);22     Mat warp_mat(2, 3, CV_32FC1);23     Mat src, warp_dst, rotate_dst;24 25     src = imread("lena.jpg");26     if (src.empty())27         return -1;28     showImg("src", src);29 30     warp_dst = Mat::zeros(src.rows, src.cols, src.type());31 32     //原始採樣點33     srcTri[0] = Point2f(0, 0);34     srcTri[1] = Point2f(src.cols - 1, 0);35     srcTri[2] = Point2f(0, src.rows - 1);36 37     //構建映射點38     dstTri[0] = Point2f(src.cols*0.0, src.rows*0.33);39     dstTri[1] = Point2f(src.cols*0.85, src.rows*0.25);40     dstTri[2] = Point2f(src.cols*0.15, src.rows*0.7);41 42     //擷取變換矩陣M=[A B]43     warp_mat = getAffineTransform(srcTri, dstTri);44 45     warpAffine(src, warp_dst, warp_mat, warp_dst.size());46 47     //旋轉中心48     Point center = Point(src.cols / 2, src.rows / 2);49     //旋轉角度50     double angle = -50.0;51     //旋轉中的縮放(因為方形映像如果不縮放進行旋轉會出現溢出現象),保證不溢出的話,縮放要在 二分之根號2 以下(約為0.7左右)52     double scale = 0.7;53 54     //擷取旋轉矩陣55     rot_mat = getRotationMatrix2D(center, angle, scale);56 57     warpAffine(src, rotate_dst, rot_mat, src.size());58 59     showImg("warp_dst", warp_dst);60     showImg("warp_rotate_dst", rotate_dst);61     waitKey();62     return 0;63 }

 

結果圖片:

仿射:

旋轉縮放:

 

主要說明請查閱相關數學資料。

 

以上。

 

OpenCV官方文檔學習記錄(20)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.