您好,登錄后才能下訂單哦!
本篇內容主要講解“C++怎么用OpenCV實現透視變換功能”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++怎么用OpenCV實現透視變換功能”吧!
前言
我們在拍攝圖片的時候無法保證圖片是正下方垂直拍攝的,所以在獲取圖像的時候會防止我們提取正確的圖像,這里我們就需要用到了透視變換。今天我們在試一下OpenCV中的透視變換。
實現效果
上圖是我們直接拍攝的手機,可以發現圖像不是正上方垂直拍攝
上面這張就是我們通過透視變換后生成的新的圖片效果
API函數
GetPerspectiveTransform
由四對點計算透射變換
CvMat* cvGetPerspectiveTransform( const CvPoint2D32f * src, const CvPoint2D32f* dst, CvMat*map_matrix );
參數詳解:
src 輸入圖像的四邊形頂點坐標。
dst 輸出圖像的相應的四邊形頂點坐標。
map_matrix 指向3×3輸出矩陣的指針。
函數cvGetPerspectiveTransform計算滿足以下關系的透射變換矩陣:
這里,dst(i)= (x'i,y'i),src(i)= (xi,yi),i = 0..3.
warpPerspective函數
主要作用:對圖像進行透視變換
函數的調用形式:
void warpPerspective(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())
參數詳解:
InputArray src:輸入的圖像
OutputArray dst:輸出的圖像
InputArray M:透視變換的矩陣
Size dsize:輸出圖像的大小
int flags=INTER_LINEAR:輸出圖像的插值方法,
代碼演示
我們再新建一個項目名為opencv--toushi,按照配置屬性(VS2017配置OpenCV通用屬性),然后在源文件寫入#include和main方法.
定義透視變換的坐標
上面的src_corners的點的定義是根據我們的原圖上自己設置的點,后面我們會找一個機會來用程序獲取這些點。
dst_corners是我們要通過矩陣變化后生成的點。
定義4個點的順序應該是順時針的方向獲取的,如下圖
獲取透視變換矩陣并顯示最后圖像
最后生成的效果
右圖為我們最后通過透視變換得到的圖像效果,在這個圖像的基礎上我們再做一些特征提取就非常的簡單了。
到此,相信大家對“C++怎么用OpenCV實現透視變換功能”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。