opencv制作扫描软件

作品简介

该程序是一款用于扫描图像的小工具
扫描是一种图像处理技术,生活中时常会用到扫描的技术,比如你获奖了,奖状到达学校第一时间是拿到学校扫描备案才会发给你,公司,印务店等也都会经常用到扫描工具,还有你扫二维码时都会使用到扫描技术

我们的最终目标就是将一个图片中我们需要的那部分独立扫描出来,就是扣图!!!

要扫描图像我们肯定是想获取对我们有用的信息内容,然而图像中难免存在许许多多无关信息,甚至可能影响我们处理图片,接下来我会一步一步根据我们需求(提取图片中的黑桃A)将程序一步步剖解开分析,首先放原图


原图

opencv制作扫描软件

1.
图像中包含的信息量非常非常庞大,但对我们有用的其实并不多,怎样才能抛开对我们没用的信息呢?灰度图是图像处理技术中非常常见的一种技术,我们可以形象的将彩图理解为一个3*二维的矩阵形式,分别是R(红)G(绿)B(蓝),而灰度图把白色(255,255,255)与黑色(0,0,0)之间按对数关系分为若干等级,称为灰度,在灰度图中,我们便不再关心RGB,而只需要关注灰度,此时信息量就减少了很多了

灰度图

opencv制作扫描软件

2.
噪声对人的影响噪声可以理解为“ 妨碍人们感觉器官对所接收的信源信息理解的因素”。而图像中也存在各种妨碍人们对其信息接受的因素,于是便引入了一个叫“图像噪声”的概念,消除噪声的方式便是使用滤波器,这里我使用的是一种称为“高斯滤波器”的技术,高斯滤波器技术的核心是对整幅图像进行加权平均,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。接下来本来应该到了轮廓提取环节的,但经过我的实践我发现有时候提取出来的图片会因为亮度原因导致有些地方的灰度区分不明显,而提取轮廓的核心就是边缘检测,图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘。此时就需要一种形态学操作:膨胀。膨胀是对白色部分(高亮部分)而言的,它使图像中的高亮部分进行膨胀,形象的理解为“领域扩张”,效果图拥有比原图更大的高亮区域。(同时膨胀也有一定的去噪效果)

去噪膨胀后的图

opencv制作扫描软件

3.
接下来就是上面所说的轮廓提取了,提取出来的轮廓就是图像中的各种信息的“领域”

轮廓提取图

opencv制作扫描软件

4.
通常情况来说我们要提取的信息同时也是整个图像中“领域”最大的那部分信息,于是我根据轮廓图选择面积最大的那块,也就得到了我们需要的黑桃A的“领域”

黑桃A轮廓

opencv制作扫描软件

5.
刚刚做的每一步都筛掉了对我们没用的信息,就剩了我们要的那部分的一个轮廓了,现在来想想,我们要把这部分内容扣出来,扣出来是什么样子呢?就是将这部分变成一个独立的图片!图片都是方形的对吧,所以我们需要确定扣出来的图片的长和宽,长和宽需要怎么获取呢?当然我们需要定位它的4个顶点,顶点怎么获取呢?很不幸,要在一个点集中直接确定它的四个顶点很不容易,但是,上帝为你关上了一扇门就会为你开一扇窗,opencv视觉库中提供了一个提取线段的函数,它的核心是霍夫曼变换。提取出了4条线段后我门就可以根据两两间的交点确定4个顶点的位置了,当然确定4个点后,四个点连成的图像并非是标准的矩形,并且我们并不知道取出的4个点顺序是怎样的,4个点的顺序就决定了我们透视变换后的图像的方向,由4个点坐标我们可以确定4个点围成的矩形的中点,然后就可以根据中点确定4个点的顺序(这里我们按左上,右上,右下,左下),,4个点的顺序有了,就可以确定两组对边,于是我们根据两组相对的边,取每组相对长的那条为标准就确定了长和宽

5点图

opencv制作扫描软件

6.
上面的准备工作都做好了以后我们就可以开始将图片独立出来了,这里便需要用到图形学中非常重要的一个概念了,透视变换!!有了4个顶点和长宽,我们就可以确定我们要独立出来的图像的顶点的位置,然后又知道原来4个点在原图中的位置,于是就可以算出变换矩阵,然后再根据这个变换矩阵进行透视,我们就大功告成了

扫描出来的图像

opencv制作扫描软件

7.
如果我们想做成黑白复印的效果怎么做呢?很简单,我们可以根据灰度图的灰度,然后确定一个阙值,然后用这个阙值,与每个像素点相比较,高于阙值的就变换成白色,低于的就变成黑色,于是就有了下图的效果

黑白图

opencv制作扫描软件