【opencv学习笔记(二十三)】之扫描文件截取边缘(附源码)

本文章由公号【开发小鸽】发布!欢迎关注!!!


老规矩–妹妹镇楼:

一. 问题描述:

       扫描仪扫描出来的文件图片,有多余的白边,需要将白边去掉 ,只留下有用的信息。且图片也可能放歪,扫描进来旋转的图片。

二. 竖直放置图像的解决思路:

(一)思路

       通过边缘检测找到边缘,然后通过边缘找到轮廓,再通过轮廓找最大的外接矩形,

(二)具体流程

       1. 首先用Canny边缘检测,并设置一个窗口的滑动阀,可以通过改变阈值改变Canny检测的结果,这一步其实是手动寻找最佳阈值,能够很完美地检测出红色边框的边缘。

       2. 得到红框的边缘后,就要用findContours寻找红框的轮廓,这时候,很多人就要问了轮廓与边缘的区别是什么呢?来看看两者的定义。
       边缘:不同区域的分界线,即图像局部灰度显著变化的部分。
       轮廓:物体在场景中的完整的边界,他表示的是一个完整的物体形状,轮廓可能是边缘的一部分,即可能有一部分的边缘组成了物体的轮廓,而另一部分的边缘无法组成完整的轮廓。所以就要先求边缘,再通过边缘来求轮廓。
       3. 由于findContours会产生很多轮廓,我们就要通过限制条件来寻找合适的轮廓。通过for循环,对轮廓vector进行查找,对每一个轮廓,计算出它的最小外接矩形,同时基于需求,我们要找的轮廓最起码是与图像的边框是相接近的,因此要通过限制条件排除过小的轮廓,可以限制长和相对于输入图像的长和宽要大于0.75。并把找到的轮廓用不同的颜色画出来。

       4. 获得轮廓的图像后,就要在原图上用轮廓把相应的文本框给取出来,即取出ROI区域,并展示。取得效果还是不错的,因为输入图片比较工整,轮廓也只有那一条,所以比较容易找出来。

三. 旋转的图片操作流程

(一)思路:

       首先我们要将旋转的图片,旋转到垂直的角度,再通过之前的正常方法将ROI区域取出来。

(二)具体流程:

       1. 同样的,旋转的图像首先也是要检测边缘,通过Canny边缘检测,检测出边缘,在通过findContours找出图像的轮廓。

       2. 找出轮廓后,对每一个轮廓求最小面积外包矩形,并比较这些矩形的尺寸,即宽和高,求出这些轮廓的最小外包矩形中最大的宽和高,即找出这些轮廓中最大的一个。因为当我们要将旋转的图像旋转到竖直方向时,是通过找出轮廓的最大值,以保证图像中所有的有用信息都不会被遗漏。然后将这个最大的轮廓画出。

       3. 找到最大的轮廓后,就要将这个轮廓进行旋转。旋转是基于图像的中心,并通过旋转矩阵来旋转图像。

       4. 图像被旋转为竖直方向后。就可以通过之前正常的切割方法进行求取了。

       这样图像的内框部分就被取出来了,需求已经达成。
       想要获取源码的小伙伴们,公号回复“ opencv源码一 ”即可获取了!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值