OpenCV实现图像校正功能实现图像校正功能
主要为大家详细介绍了OpenCV实现图像校正功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
一、一、 需求分析需求分析
首先是需求:
1、利用 OpenCV 里面的仿射变换函 数实现对图像进行一些基本的变换,如平移、旋转、缩放
2、学习透视变换原理,对一个矩形进行透视变换,并将变换结果绘制出来。先调用 OpenCV 函数实现透视变换,自己编写代
码实现透视变换。
3、识别一张倾斜拍摄的纸张,找出轮廓,提取出该纸张的位置
4、 假设你已通过图像处理的算法找到发生形变的纸张的位置,那么对这个倾斜 纸张进行变换,得到纸张的垂直视图,实现
文档校准。
然后是分析:
1、首先要调用OpenCV的函数对图像进行平移、旋转、缩放变换,然后要进行仿射变换和透视变换。
2、编程实现仿射变换和透视变换,注意到仿射变换是透视变换的一种,因此只需实现透视变换
3、 实现文档校准:
(1)滤波。考虑到文档中的字(噪点),同时采用均值滤波和闭运算滤波。
(2)边缘提取。利用库函数提取边缘信息
(3)边缘识别。利用经典霍夫变换,获得边界方程,并且计算出文档的四个角的坐标
(4)透视变换。调用库函数,实现文档校准
5、由于前三个需求与最后一个需求的源码放在同一个工程中显得不合适,因此,我将前三个需求的代码和注释放在了工程:
作业2_2中,开发环境是win10 vs2017,openCV3.43
二、二、 实现实现
注意:
以下的函数全部写在标头.h文件中,要在在main中调用标头.h文件中的函数才能完成功能
还有就是图片输入的路径要改好。
1、工程:作业2_2的实现
(1)调用OpenCV内的函数,编写了一个main_transform函数,在主函数调用它,输入图片后,同时将图片缩小、平移、旋
转、透视和仿射变换,并且将图片展示和保存下来(实际上后来openCV的仿射、透视我注释掉了,不用它自带的函数了)
都是直接调用函数,没什么好说的。
下面分别是旋转、透视、平移、缩小、仿射的效果图:
(2)手动实现仿射、透视变换函数 toushibianhuan和toushibianhuan_gai_fangshebianhuan,并在main_transform中调用他
们。
透视变换实现:透视变换实现:
注意到仿射变换是透视变换的特殊情况,因此只要实现了透视就可以实现仿射。
透视函数的实现:透视函数的实现:
首先使用getPerspectiveTransform来获取变换矩阵,然后看透视函数
toushibianhuan函数需要三个输入参数:
第一个参数:透视变换输入的图像矩阵,Mat
第二个参数:输出图像容器矩阵,Mat
第三个参数:变换矩阵,Mat
进入函数后,首先定义出一个位置矩阵position_maxtri用以刻画变换前图像的位置,利用矩阵元素积,乘以变换矩阵后算出变
换后的四个角的位置矩阵。
用Max、Min函数计算出图像最高点、最低点,进而算出图像的高和宽
然后,重点来了,定义、更新计算出两个重映射矩阵。Map1是从原图的x—>新图x的映射,Map2是从原图y—>新图y的映
射。
/*-----------------------------------------------------------------------------------------------------------------
Copyright (C),2018---, HUST Liu
评论0
最新资源