OpenCV 萌新福音:易上手的数字识别实践案例
摘要:信用卡识别的案例用到了图像处理的一些基本操作,对刚上手 CV 的人来说还是比较友好的。
本文分享自华为云社区《Python openCV案例:信用卡数字识别》,原文作者:深蓝的回音 。
前言
实践是检验真理的唯一标准。
因为觉得一板一眼地学习 OpenCV 太过枯燥,于是在网上找了一个以项目为导向的教程学习。话不多说,动手做起来。
一、案例介绍
提供信用卡上的数字模板:
要求:识别出信用卡上的数字,并将其直接打印在原图片上。虽然看起来很蠢,但既然可以将数字打印在图片上,说明已经成功识别数字,因此也可以将其转换为数字文本保存。车牌号识别等项目的思路与此案例类似。
示例:
处理后的图
二、步骤
大致分为如下几个步骤:
1.模板读入
2.模板预处理,将模板数字分开,并排序
3.输入图像预处理,将图像中的数字部分提取出来
4.将数字与模板数字进行匹配,匹配率最高的即为对应数字。
1、模板读入,以及一些包的导入,函数定义等
2、模板预处理,将模板数字分开,并排序
模板的预处理顺序:灰度图,二值化,再进行轮廓检测。需要注意的是 openCV 检测轮廓时是检测白色边框,因此要将模板图的数字二值化变为白色。
红色部分即为检测出的轮廓。
接下来进行轮廓排序,因为检测出的轮廓是无序的,因此要按照轮廓的左上角点的 x 坐标来排序。轮廓排序后按顺序放入字典,则字典中的键值对是正确匹配的,如‘0’对应轮廓 0 ,‘1’对应轮廓 1。
至此,模板图处理完毕。
3、输入图像预处理,将图像中的数字部分提取出来
在此步骤中需要将信用卡上的每个数字提取出来,并与上一步得到的模板一一匹配。首先初始化卷积核,方便之后 tophat 操作以及闭运算操作使用。
接下来读入图片,调整图片大小,转换为灰度图。
然后进行 tophat 操作,tophat 可以突出图片中明亮的区域,过滤掉较暗的部分:
再通过 sobel 算子检测边缘,进行一次闭操作,二值化,再进行一次闭操作,填补空洞。
之后就可以查找轮廓了。
4、模板匹配
将模板数字和待识别的图片都处理好后,就可以进行匹配了。
接下来,遍历每一个大轮廓,每个大轮廓中有四个数字,对应四个小轮廓。将小轮廓与模板匹配。
最后将其打印出来,任务就完成了。
总结
信用卡识别的案例用到了图像处理的一些基本操作,对刚上手 CV 的人来说还是比较友好的。
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/ebd3711605070f8ad1679bfcc】。文章转载请联系作者。
评论