日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

warpPerspective函数

發布時間:2025/4/16 编程问答 8 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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
  • #include<cv.h>??
  • #include<highgui.h>??
  • ??
  • #pragma?comment(lib,?"cv.lib")??
  • #pragma?comment(lib,?"cxcore.lib")??
  • #pragma?comment(lib,?"highgui.lib")??
  • ??
  • int?main()??
  • {??
  • ????CvPoint2D32f?srcTri[4],?dstTri[4];??
  • ????CvMat*???????warp_mat?=?cvCreateMat?(3,?3,?CV_32FC1);??
  • ????IplImage*????src?=?NULL;??
  • ????IplImage*????dst?=?NULL;??
  • ??
  • ????src?=?cvLoadImage?("test.png",?1);??
  • ????dst?=?cvCloneImage?(src);??
  • ????dst->origin?=?src->origin;??
  • ????cvZero?(dst);??
  • ??
  • ????srcTri[0].x?=?0;??
  • ????srcTri[0].y?=?0;??
  • ????srcTri[1].x?=?src->width?-?1;??
  • ????srcTri[1].y?=?0;??
  • ????srcTri[2].x?=?0;??
  • ????srcTri[2].y?=?src->height?-?1;??
  • ????srcTri[3].x?=?src->width?-?1;??
  • ????srcTri[3].y?=?src->height?-?1;??
  • ??
  • ????dstTri[0].x?=?src->width?*?0.05;??
  • ????dstTri[0].y?=?src->height?*?0.33;??
  • ????dstTri[1].x?=?src->width?*?0.9;??
  • ????dstTri[1].y?=?src->height?*?0.25;??
  • ????dstTri[2].x?=?src->width?*?0.2;??
  • ????dstTri[2].y?=?src->height?*?0.7;??
  • ????dstTri[3].x?=?src->width?*?0.8;??
  • ????dstTri[3].y?=?src->height?*?0.9;??
  • ??
  • ????cvGetPerspectiveTransform?(srcTri,?dstTri,?warp_mat);??
  • ????cvWarpPerspective?(src,?dst,?warp_mat);??
  • ??
  • ????cvNamedWindow("src",?1);??
  • ????cvShowImage("src",?src);??
  • ????cvNamedWindow?("Affine_Transform",?1);??
  • ????cvShowImage?("Affine_Transform",?dst);??
  • ??
  • ????cvWaitKey?(0);??
  • ??
  • ????cvReleaseImage?(&src);??
  • ????cvReleaseImage?(&dst);??
  • ????cvReleaseMat?(&warp_mat);??
  • ??
  • ????return?0;??
  • }??

  • 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的warpPerspective函数的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。