十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇内容主要讲解“C++怎么用OpenCV实现透视变换功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么用OpenCV实现透视变换功能”吧!
成都创新互联是一家专业提供松溪企业网站建设,专注与成都做网站、网站设计、H5开发、小程序制作等业务。10年已为松溪众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。
前言
我们在拍摄图片的时候无法保证图片是正下方垂直拍摄的,所以在获取图像的时候会防止我们提取正确的图像,这里我们就需要用到了透视变换。今天我们在试一下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个点的顺序应该是顺时针的方向获取的,如下图
获取透视变换矩阵并显示最后图像
最后生成的效果
右图为我们最后通过透视变换得到的图像效果,在这个图像的基础上我们再做一些特征提取就非常的简单了。
到此,相信大家对“C++怎么用OpenCV实现透视变换功能”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!