warpPerspective函数
warpPerspective函數(shù)
主要作用:對(duì)圖像進(jìn)行透視變換,就是變形
函數(shù)的調(diào)用形式:
C++:?void?warpPerspective(InputArray?src, OutputArray?dst, InputArray?M, Size?dsize, int?flags=INTER_LINEAR, int?borderMode=BORDER_CONSTANT, const Scalar&?borderValue=Scalar())
參數(shù)詳解:
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():邊界的顏色設(shè)置,一般默認(rèn)是0
函數(shù)原理:
透視變換(Perspective Transformation)是將圖片投影到一個(gè)新的視平面(Viewing Plane),也稱(chēng)作投影映射(Projective Mapping)。通用的變換公式為:
u,v是原始圖片左邊,對(duì)應(yīng)得到變換后的圖片坐標(biāo)x,y,其中。
變換矩陣可以拆成4部分,表示線(xiàn)性變換,比如scaling,shearing和ratotion。用于平移,產(chǎn)生透視變換。所以可以理解成仿射等是透視變換的特殊形式。經(jīng)過(guò)透視變換之后的圖片通常不是平行四邊形(除非映射視平面和原來(lái)平面平行的情況)。
重寫(xiě)之前的變換公式可以得到:
所以,已知變換對(duì)應(yīng)的幾個(gè)點(diǎn)就可以求取變換公式。反之,特定的變換公式也能新的變換后的圖片。簡(jiǎn)單的看一個(gè)正方形到四邊形的變換:
變換的4組對(duì)應(yīng)點(diǎn)可以表示成:
根據(jù)變換公式得到:
定義幾個(gè)輔助變量:
都為0時(shí)變換平面與原來(lái)是平行的,可以得到:
不為0時(shí),得到:
求解出的變換矩陣就可以將一個(gè)正方形變換到四邊形。反之,四邊形變換到正方形也是一樣的。于是,我們通過(guò)兩次變換:四邊形變換到正方形+正方形變換到四邊形就可以將任意一個(gè)四邊形變換到另一個(gè)四邊形。
?opencv代碼:
[cpp]?view plaincopy
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結(jié)
以上是生活随笔為你收集整理的warpPerspective函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: getPerspectiveTransf
- 下一篇: warpAffine函数