点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
小伙伴们有没有想过“CamScanner”如何将我们移动相机的模糊文档图片转换为定义好的、光线充足的扫描图像?我曾经并且直到最近我认为这是一项非常艰巨的任务,但事实并非如此,我们可以用相对较少的代码行创建我们自己的“CamScanner”。
什么是计算机视觉以及为什么如此流行?
计算机视觉是一个跨学科的科学领域,研究计算机如何从数字图像或视频中获得高水平的理解。从工程的角度来看,它试图理解和自动化人类视觉系统可以完成的任务,它是一个科学领域,可以让计算机理解照片/视频,类似于人类如何理解它。
人工智能和机器学习的进步加速了计算机视觉的发展,早期这是两个不同的领域,并且两者都有不同的技术、编码语言和学术研究人员,但现在这一差距已经大大缩小,越来越多的数据科学家在计算机视觉领域工作,反之亦然。原因在于这两个领域有着简单共同点——数据。
归根结底,计算机是通过消耗数据来学习,而人工智能不仅可以帮助计算机进行处理,还可以通过反复试验来提高其理解/解释能力。所以现在,如果我们可以结合图像数据并在其上运行复杂的机器学习算法,那么我们得到的便是一个真正的人工智能。
我们今天要实现什么?
在文章中,我们将只专注于计算机视觉,而机器学习我们以后再说。此外,我们将只使用一个OpenCV库来创建整个内容。
索引
什么是 OpenCV?
使用不同的概念对图像进行预处理,例如模糊、阈值处理、去噪(非局部均值)。
Canny 边缘检测和最大轮廓提取
最后——锐化和亮度校正
什么是 OpenCV
OpenCV 是一个主要针对实时计算机视觉的编程函数库,最初由 Intel 开发,后来由 Willow Garage 和 ITEZ 提供支持。该库是跨平台的,可在开源 BSD 许可下免费使用,它最初是用 C++ 开发的,但现在它可以跨多种语言使用,例如 Python、Java 等。
预处理
模 糊
模糊的目的是减少图像中的噪声,它从图像中去除高频内容(例如:噪声、边缘),导致边缘模糊。
平均——它只是取内核区域下所有像素的平均值,并用这个平均值替换中心元素。
高斯滤波器——使用高斯核代替由相等滤波器系数组成的盒式滤波器。
中值滤波器——计算内核窗口下所有像素的中值,并用这个中值替换中心像素。
双边滤波器——高斯模糊的高级版本,它不仅可以消除噪音,还可以平滑边缘。
原始VS高斯模糊
阈 值
在图像处理中,阈值分割是最简单的图像分割方法,在灰度图像中,阈值可用于创建二值图像,这样做通常是为了清楚地区分不同的像素强度阴影。
简单阈值——如果像素值大于阈值,则为其分配一个值(可能是白色),否则为其分配另一个值(可能是黑色)。
自适应阈值——算法计算图像小区域的阈值。因此,对于同一图像的不同区域,我们可以得到不同的阈值,对于不同照明的图像,我们可以得到更好的结果。
注意:切记在阈值之前将图像转换为灰度