最终的效果图是这样的:
图中的一个小的窗口中为resize之后的所有找到的图片的列表,在这个case中,有三个数字。
数字识别即将图片中的数字通过计算机算法识别为文本。如果要从头写一个识别器,可能需要很多的实践,花费很大的精力,而且还需要有良好的数学功底才能完成,不过使用opencv提供的丰富的API和算法实现,可以比较容易的做到,而且也可以得到比较高的精确率。
数字识别是模式识别中的一个特例,我这里要讨论的是一个比较简单的实现,基于最简单也最容易理解的KNN算法(请参看之前的一篇文章)。
数字识别和其他的所有计算机视觉相关的应用都会分为两个步骤:ROI抽取和识别。
1. ROI抽取即将感兴趣的区域从原始图像中分离初来,这个步骤包括二值化,噪点的消除等
2. 识别即通过一些分类器将第一步中的结果进行分类,事实上属于机器学习的一个典型应用
图像预处理
原始图片中会有大量与目标无关的信息,比如人脸检测中,背景中往往有诸如桌椅,墙壁上的画,或者在户外的树木,动物等等,这些与目标无关的信息被称为噪音或者噪点,应该在进行分类之前通过一些特定的步骤来消除,不但可以减少计算量,而且还可以提高准确率。
灰度图
通常的彩色图形由3个(RGB)或者4个(RGBA)通道组成,在计算机看来,一个彩色的图片是由3/4个矩阵组成,每个矩阵中包含若干个点(比如1024x768),如果每个通道都参与运算的话,会引入太多的计算量,因此通常的做法是将彩色图像转换为灰度图,在opencv中,这一步非常容易: