【OpenCV】透视变换 仿射变换
目錄
一:透視變換基本概念
二:透視變換工作原理
三:findHomography函數
四:warpPerspective函數
五:getPerspectiveTransform函數
一:透視變換基本概念
仿射變換(affine transform)與透視變換(perspective transform)在圖像還原、圖像局部變化處理方面有重要意義
通常,在2D平面中,仿射變換的應用較多,而在3D平面中,透視變換又有了自己的一席之地兩種變換原理相似,結果也類似,可針對不同的場合使用適當的變換
仿射變換和透視變換的數學原理不需深究,在應用層面,仿射變換是圖像基于3個固定頂點的變換,如下圖所示:
仿射變換是圖像基于3個固定頂點的變換,
接下來學習的透視變換是4個固定頂點的變換???????
二:透視變換工作原理
透視變換(Perspective Transformation)的本質是
將圖像投影到一個新的視平面,其通用變換公式為:
(u,v)為原始圖像像素坐標,(x=x’/w’,y=y’/w’)為變換之后的圖像像素坐標
透視變換矩陣圖解如下:?
仿射變換(Affine Transformation)可以理解為透視變換的特殊形式
透視變換的數學表達式為:
所以,給定透視變換對應的四對像素點坐標,即可求得透視變換矩陣;
反之,給定透視變換矩陣,即可對圖像或像素點坐標完成透視變換,
如下圖所示:
三:findHomography函數
findHomography:
計算多個二維點對之間的最優單映射變換矩陣 H(3行x3列) ,使用最小均方誤差或者RANSAC方法
函數功能:找到兩個平面之間的變換矩陣
函數參數:
Mat cv::findHomography? (? InputArray ? srcPoints,
??????????????????????????????? InputArray ? dstPoints,
??????????????????????????????? int ? method = 0,
??????????????????????????????? double ? ransacReprojThreshold = 3,
??????????????????????????????? OutputArray ? mask = noArray(),
??????????????????????????????? const int ? maxIters = 2000,
??????????????????????????????? const double ? confidence = 0.995
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )
四:warpPerspective函數
函數原型:
void warpPerspective(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())
函數參數說明:
src – 輸入圖像 dst – 大小為dsize且類型與src相同的輸出圖像 M – 3×3變換矩陣 dsize – 輸出圖像的大小圖中紅點即為固定頂點,在變換先后固定頂點的像素值不變,圖像整體則根據變換規則進行變換
同理,透視變換是圖像基于4個固定頂點的變換,如圖所示:
五:getPerspectiveTransform函數
函數原型:
C++方式一:Mat getPerspectiveTransform(InputArray src, InputArray dst)
C++方式二:Mat getPerspectiveTransform(const Point2f src[], const Point2f dst[])
函數參數說明:
??? src – 源圖像中四邊形頂點的坐標
??? dst – 目標圖像中相應四邊形頂點的坐標。
該函數計算透視變換的3乘3矩陣,以便實現以下計算:
總結
以上是生活随笔為你收集整理的【OpenCV】透视变换 仿射变换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CISAW是什么?CISAW有什么优势?
- 下一篇: 自然语言处理笔记6-哈工大 关毅