opencv透视变换:GetPerspectiveTransform、warpPerspective函数的使用
?
透視變換在圖像還原的上的應用很廣泛,他是將成像投影到一個新的視平面。比如兩個攝像頭在不同的角度對統一物體進行拍照,物體上的同一個點在兩張照片上的坐標是不一樣的,為了實現兩張圖片同一個點的對應關系映射,透視變換就實現了此功能。
一、獲取透視變換矩陣函數GetPerspectiveTransform
功能描述
從四對對應的點計算透視變換.函數計算的是 3*3的滿足以下關系的透視轉換矩陣:
此處
原型
CV_EXPORTS_W Mat getPerspectiveTransform(InputArray src, InputArray dst, int solveMethod = DECOMP_LU); CV_EXPORTS Mat getPerspectiveTransform(const Point2f src[], const Point2f dst[], int solveMethod = DECOMP_LU);參數釋義
-
參數 src 源圖像四邊形頂點坐標.
-
參數 dst 目標圖像對應的四邊形頂點坐標.
-
參數 solveMethod 傳遞給cv::solve(#DecompTypes)的計算方法,默認是DECOMP_LU
-
參考 findHomography, warpPerspective, perspectiveTransform
?
二、透視變換函數warpPerspective
功能描述
通過透視矩陣把透視變換應用到一個圖像上。
如果指定 CV_WARP_INVERSE_MAP,函數warpPerspective使用下面指定矩陣轉換源圖像:
否則,轉換首先使用反轉進行反轉,然后代替M放到上面的公式中,這個函數不能使用in-place(就地)操作。
原型
CV_EXPORTS_W void warpPerspective( InputArray src, OutputArray dst,InputArray M, Size dsize,int flags = INTER_LINEAR,int borderMode = BORDER_CONSTANT,const Scalar& borderValue = Scalar());參數釋義
-
參數:src 輸入圖像。
-
參數: dst 輸出圖像,具有Size dsize并且和源圖像具有相同的類型 .
-
參數: M 3*3的轉換矩陣.
-
參數: dsize 輸出圖像的大小.
-
參數: flags 插值方法的組合(INTER_LINEAR(雙線性插值)或 INTER_NEAREST(雙線性插值))和可選的標志g #WARP_INVERSE_MAP, 為了設置M作為反轉轉換 (dst->src)
-
參數: borderMode 像素外推方法 (#BORDER_CONSTANT指定常數填充 or #BORDER_REPLICATE復制邊緣像素填充).
-
參數: borderValue 固定邊緣情況下使用的值,缺省是0.
-
參考warpAffine, resize, remap, getRectSubPix, perspectiveTransform
源碼示例:
#include <iostream> #include <opencv2/opencv.hpp> #include <opencv2/imgproc/imgproc_c.h> ? using namespace cv; int main() {// 源圖像Mat srcImage = imread("D:\\OpenCVtest\\images\\juice.png");// 目標圖像Mat dstImage;// 取原圖四個頂點Point2f AffinePointsSrc[4] = { Point2f(40, 50), Point2f(100, 190), Point2f(200, 50), Point2f(300, 190) };// 取原圖四個頂點在目標圖像上的坐標Point2f AffinePointsDst[4] = { Point2f(50, 60), Point2f(120, 200), Point2f(200, 50), Point2f(300, 190) }; ? ?// 求出透視變換矩陣Mat TransImage = getPerspectiveTransform(AffinePointsSrc, AffinePointsDst); ?warpPerspective(srcImage, dstImage, TransImage, Size(srcImage.cols, srcImage.rows), CV_INTER_CUBIC); ?// 目標圖像上的四個點上標記圓形for (int i = 0; i < 4; i++){circle(dstImage, AffinePointsDst[i], 2, Scalar(0, 0, 255), 2);}imshow("src", srcImage);imshow("dst", dstImage);waitKey(); }運行結果
?
總結
以上是生活随笔為你收集整理的opencv透视变换:GetPerspectiveTransform、warpPerspective函数的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu18.04下安装中文输入法
- 下一篇: OpenCV图像翻转:flip()函数的