前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ OpenCV之透视变换

C++ OpenCV之透视变换

作者头像
Vaccae
发布2019-07-24 13:13:16
3K0
发布2019-07-24 13:13:16
举报
文章被收录于专栏:微卡智享微卡智享

前言

我们在拍摄图片的时候无法保证图片是正下方垂直拍摄的,所以在获取图像的时候会防止我们提取正确的图像,这里我们就需要用到了透视变换。今天我们在试一下OpenCV中的透视变换。

实现效果

上图是我们直接拍摄的手机,可以发现图像不是正上方垂直拍摄

上面这张就是我们通过透视变换后生成的新的图片效果

API函数


GetPerspectiveTransform 由四对点计算透射变换 CvMat* cvGetPerspectiveTransform( const CvPoint2D32f * src, const CvPoint2D32f* dst, CvMat*map_matrix );

参数详解:

src 输入图像的四边形顶点坐标。 dst 输出图像的相应的四边形顶点坐标。 map_matrix 指向3×3输出矩阵的指针。 函数cvGetPerspectiveTransform计算满足以下关系的透射变换矩阵: 这里,dst(i)= (x'i,y'i),src(i)= (xi,yi),i = 0..3.


warpPerspective函数 主要作用:对图像进行透视变换 函数的调用形式: 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:输出图像的插值方法,


代码演示

我们再新建一个项目名为opencv--toushi,按照配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法.


定义透视变换的坐标

上面的src_corners的点的定义是根据我们的原图上自己设置的点,后面我们会找一个机会来用程序获取这些点。

dst_corners是我们要通过矩阵变化后生成的点。

定义4个点的顺序应该是顺时针的方向获取的,如下图


获取透视变换矩阵并显示最后图像


最后生成的效果

右图为我们最后通过透视变换得到的图像效果,在这个图像的基础上我们再做一些特征提取就非常的简单了。


-END-

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档