Opencv中的仿射變換和透射變換

2021-08-28 17:08:08 字數 966 閱讀 5223

opencv提供了一些關於透視變換的介面,例如getperpectivetransform, warpperspective等。這裡主要說明一下warpperspective是如何工作的。

其實opencv中很多影象變換的對映關係都是反直覺的,如這裡的warpperspective和remap函式。直覺告訴我們,這些函式的輸入是原圖的畫素座標,通過對映表或矩陣運算,輸出的是目標影象的畫素座標。其實不然,opencv是先取乙個目標影象的座標,然後根據對映關係定位到原圖中去,再從原圖中得到該座標的畫素值。然而通過對映關係得到的座標通常不是乙個整數,即並不是原圖的乙個畫素座標,所以還需根據原圖中該座標周圍的畫素值用某些插值演算法計算出該座標應有的畫素值。也就是:

對於warpperspective這個函式,我們已知它表示的對映關係了:

xo=(m11x+m12y+m13)/(m31x+m32y+m33)

yo=(m21x+m22y+m23)/(m31x+m32y+m33)

當我們想計算原圖中某個特定的點在目標影象中的位置時,就需要解這個二元一次方程組了,解得:

x=((m22-m32yo)(m33xo-m13)-(m12-m32xo)(m33yo-m23))/((m22-m32yo)(m11-m31xo)-(m12-m32xo)(m21-m31yo))

y=((m21-m31yo)(m33xo-m13)-(m11-m31xo)(m33yo-m23))/((m21-m31yo)(m12-m32xo)-(m11-m31xo)(m22-m32yo))

透視變換(perspective transformation):

u,v是原始左邊,對應得到變換後的座標x,y,其中

變換矩陣

OpenCV 仿射變換

一 仿射變換 仿射變換是一種二維座標之間的變換,變換前後保持圖形的平直性和平行性。仿射變換可以理解為是向量經過一次線性變換和一次平移變換。void warpaffine inputarray src,outputarray dst,inputarray m,size dsize,int flags ...

opencv 仿射變換

仿射變換的兩種方式 1 利用變換前後的三個座標點達到變換目的。2 使用旋轉角度和縮放倍數來變換。在實際的使用中,採用1的方式比較方便,但是有乙個問題 變換之後的矩陣大小該如何正確設定,如果設定大小不合適,會導致圖的實際區域超出邊界。所以在此記錄一下解決辦法。思路 由於已知了變換前後的三個座標點,可以...

OpenCV實現仿射變換

乙個任意的仿射變換都能表示為 乘以乙個矩陣 線性變換 接著再 加上乙個向量 平移 綜上所述,我們能夠用仿射變換來表示 旋轉 線性變換 平移 向量加 縮放操作 線性變換 你現在可以知道,事實上,仿射變換代表的是兩幅圖之間的關係.全域性變數 char source window source image...