詳解 OpenCV 透視變換原理 及 實例

在這裏插入圖片描述
OpenCV提供了兩種圖片變換的方式:仿射變換和透視變換,兩者的區別很容易區分,

  • 前者是將矩形的圖片變成平行四邊形
  • 後者是將圖片變成梯形

這兩種變換雖然都有各自的應用場景,但在實際的圖片變換中由於透視效應的存在,後者的使用更加普遍,本文爲大家詳解OpenCV透視變換的透視變換原理及實例展示。

簡介

透視變換(Perspective Transformation)是將成像投影到一個新的視平面(Viewing Plane),也稱作投影映射(Projective Mapping)。如圖所示

在這裏插入圖片描述

函數原型

OpenCV提供了warpPerspective( )函數來實現圖片的透視變換,只需要輸入梯形四個頂點的座標和目標畫布四個角的座標,即可自動完成轉換。核心代碼只有兩行:首先讀取兩個座標數組,計算變換矩陣;然後根據變換矩陣對原圖進行透視變換,並輸出到目標畫布。

 cv2.getPerspectiveTransform(src, dst) → retval

參數說明

  • src:源圖像中待測矩形的四點座標
  • sdt:目標圖像中矩形的四點座標

注意!

原圖像的四個座標順序應與目標圖像中的四個座標一 一隨影,若都是順時針則都是順時針,若都是 Z 字型,則都是 Z 字型。

返回由源圖像中矩形到目標圖像矩形變換的矩陣,得到矩陣得有用纔行啊,所以引出下面這個函數

cv2.warpPerspective(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst

參數爲:

  • src:輸入圖像
  • M:變換矩陣
  • dsize:目標圖像shape
  • flags:插值方式,interpolation方法INTER_LINEAR或INTER_NEAREST
  • borderMode:邊界補償方式,BORDER_CONSTANT or BORDER_REPLICATE
  • borderValue:邊界補償大小,常值,默認爲0

或者

cv2.perspectiveTransform(src, m[, dst]) → dst

參數解釋

  • src:輸入的2通道或者3通道的圖片
  • m:變換矩陣

返回的是相同size的圖片

實例1 圖片矯正

我們在給報紙、雜誌、身份證、銀行卡等矩形目標拍照時,受相機角度和高度的影響往往會拍出梯形的照片(如下圖),這樣的照片不僅不夠美觀而且給文字識別帶來較大難度,將梯形的圖片轉換成標準的矩形就要對圖片進行透視變換。

原始圖像

在這裏插入圖片描述

效果如下:

轉換後的效果如下圖所示,效果還是很讓人滿意的。
在這裏插入圖片描述

實例 2 頭像替換廣告牌

在實際應用中我們不僅需要將梯形矯正爲矩形,有時還需要將矩形轉換成梯形,warpPerspective( )當然也能勝任,下面我們再用一個例子來演示。

在這裏插入圖片描述

實際效果

在這裏插入圖片描述

實例代碼:

全部代碼見:
https://github.com/ViatorSun/Demo/tree/master/OpenCV

  • 其中 Perspective.py 爲 實例 1 代碼,使用時需要將圖像 img_32984.jpg 放在同一路徑下
  • Perspective_advert.py 爲實例 2 代碼,圖像 advert.png 、photo.png 爲實驗圖像
  • res.png 爲實例 2 實現的效果圖
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章