飞道的博客

计算机视觉 OpenCV【五:应用之透视变换】

379人阅读  评论(0)

目录

一、什么是透视变换?

例子

定义

二、实现代码 


一、什么是透视变换?

例子

现在你有一副牌,从你的视角看过去,这四张牌是这样的:

现在我们想得到他们的俯视图,也就是把牌立起来,变成这样:

这就是透视变换做的事。

定义

透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。

二、实现代码 


  
  1. #include <opencv2/opencv.hpp>
  2. #include <iostream>
  3. float w = 250;
  4. float h = 350;
  5. using namespace cv;
  6. using namespace std;
  7. int main()
  8. {
  9. //定义图片路径
  10. string path = "Resources/cards.jpg";
  11. Mat img = imread(path);
  12. //创建透视变换矩形
  13. Mat matrix;
  14. //创建画布,用来存放变换后的牌的矩阵
  15. Mat imgWarp;
  16. //原图的四个点,我们可以用画图来看对应坐标
  17. Point2f src[ 4] = { { 529, 142},{ 771, 190},{ 405, 395},{ 674, 457} };
  18. //目标图的四个点
  19. Point2f dest[ 4] = { { 0.0f, 0.0f},{w, 0.0f},{ 0.0f,h},{w,h} };
  20. //定义矩形,参数分别为原图四点,目标图四点;
  21. matrix = getPerspectiveTransform(src, dest);
  22. //透视变换输出函数,参数分别为原图,目标图,透视变换矩阵,目标图的右下角的点
  23. warpPerspective(img, imgWarp, matrix,Point(w,h));
  24. //循环,标出原图中做透视变换的点
  25. for ( int i = 0; i < 4; i++)
  26. {
  27. circle(img, src[i], 10, Scalar( 0, 0, 255), FILLED);
  28. }
  29. //展示
  30. imshow( "Image", img);
  31. imshow( "ImageWarp", imgWarp);
  32. waitKey( 0);
  33. return 0;
  34. }

三、效果 

 


转载:https://blog.csdn.net/Kukeoo/article/details/116244417
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场