warpPerspective函数
warpPerspective函數
主要作用:對圖像進行透視變換,就是變形
函數的調用形式:
C++:?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:輸出圖像的插值方法,
combination of interpolation methods (INTER_LINEAR?or?INTER_NEAREST) and the optional flagWARP_INVERSE_MAP, that sets?M?as the inverse transformation (??)
int?borderMode=BORDER_CONSTANT:圖像邊界的處理方式
const Scalar&?borderValue=Scalar():邊界的顏色設置,一般默認是0
函數原理:
透視變換(Perspective Transformation)是將圖片投影到一個新的視平面(Viewing Plane),也稱作投影映射(Projective Mapping)。通用的變換公式為:
u,v是原始圖片左邊,對應得到變換后的圖片坐標x,y,其中。
變換矩陣可以拆成4部分,表示線性變換,比如scaling,shearing和ratotion。用于平移,產生透視變換。所以可以理解成仿射等是透視變換的特殊形式。經過透視變換之后的圖片通常不是平行四邊形(除非映射視平面和原來平面平行的情況)。
重寫之前的變換公式可以得到:
所以,已知變換對應的幾個點就可以求取變換公式。反之,特定的變換公式也能新的變換后的圖片。簡單的看一個正方形到四邊形的變換:
變換的4組對應點可以表示成:
根據變換公式得到:
定義幾個輔助變量:
都為0時變換平面與原來是平行的,可以得到:
不為0時,得到:
求解出的變換矩陣就可以將一個正方形變換到四邊形。反之,四邊形變換到正方形也是一樣的。于是,我們通過兩次變換:四邊形變換到正方形+正方形變換到四邊形就可以將任意一個四邊形變換到另一個四邊形。
?opencv代碼:
[cpp]?view plaincopy
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的warpPerspective函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: getPerspectiveTransf
- 下一篇: warpAffine函数