最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

【学习笔记

运维笔记admin22浏览0评论

【学习笔记

【学习笔记

前言:在做项目的时候,用到了关于 “点” 的透视变换,查阅很多blog,发现大多数都是关于图的透视变换,所以特意记录一下,顺便把图片的透视变换代码贴到这里,方便大家查阅。

一、图的透视变换----得到透视后的图
我们在做图像处理的时候经常需要做透视变换得到鸟瞰图,在鸟瞰图上做处理,甚至根据需要还需要将透视后 处理过的图像再次的透视变换回去。这里简单粗暴的记录一下自己曾经学习的心路。重点:简单粗暴,快速上手,废话不多说,开始我的表演。

//  定义四个原始点
cv::Point2f sourcePoints[4], objectPoints[4];
sourcePoints[0].x = 567 - 10.; sourcePoints[0].y = 461.; //left_top
sourcePoints[1].x = 692.; sourcePoints[1].y = 461.;  //right_top
sourcePoints[2].x = 369 - 10.; sourcePoints[2].y = 638;   //left_bottom
sourcePoints[3].x = 1058; sourcePoints[3].y = 638.;  //right_bottom/
// 定义四个目标点 或者说是你透视变换后图像的大小
objectPoints[0].x = 50.; objectPoints[0].y = 15.;
objectPoints[1].x = 276.; objectPoints[1].y = 15.;
objectPoints[2].x = 50.; objectPoints[2].y = 610.;
objectPoints[3].x = 276.; objectPoints[3].y = 610.
// 透视变换矩阵
transformMatrix = cv::getPerspectiveTransform(objectPoints, sourcePoints);  //perspective matrix
cv::warpPerspective(inputImage, inputImage, Matrix, Size(inputImage.rows/2, inputImage.cols/2), INTER_LINEAR);  // 透视变换

效果图如下:
原图:鸟瞰图:

二、点的透视变换----得到透视后点的坐标
点的透视变换和图片的透视变换原理是一样的,具体代码如下:

//原始点sourcePoints[0].x = 567 - 10.; sourcePoints[0].y = 461.; //left_topsourcePoints[1].x = 692.; sourcePoints[1].y = 461.;  //right_topsourcePoints[2].x = 369 - 10.; sourcePoints[2].y = 638;   //left_bottomsourcePoints[3].x = 1058; sourcePoints[3].y = 638.;  //right_bottom// 目标点objectPoints[0].x = 50.; objectPoints[0].y = 15.;objectPoints[1].x = 276.; objectPoints[1].y = 15.;objectPoints[2].x = 50.; objectPoints[2].y = 610.;objectPoints[3].x = 276.; objectPoints[3].y = 610.;std::vector<cv::Point2f> warpedLeftPoint;  // 点为  cv::Point2f类型  我这里是一堆点
cv::perspectiveTransform(points, warpedLeftPoint, transformMatrix);  //点的透视变换,透视变换矩阵和图像透视变换矩阵一样

三、总 结
点的透视变换和图片的透视变换本质上是一样的,具体步骤都是一样的:

  1. 定义4个原始点和4个目标点。
  2. 利用点的对应关系,求透视变换矩阵。
  3. 根据透视变换矩阵得到透视变换后的点或者图像。
发布评论

评论列表(0)

  1. 暂无评论