OpenCV计算机视觉实战(Python)_09-项目实战:信用卡数字识别( Jupyter notebook实现)

本文介绍了使用OpenCV进行信用卡数字识别的过程,包括图像读取、灰度化、二值化、轮廓检测、模板匹配等步骤,通过长宽比筛选出数字模块,并对每个数字进行匹配识别。
摘要由CSDN通过智能技术生成

1.介绍

从一个银行卡中识别其中的银行卡号:

2. 流程

  • 读图 , 灰度图 , 二值化
  • 使用模板匹配方式对模板,以及输入图像进行轮廓检测(检测外轮廓)。
  • 得到当前轮廓的外接矩形。
  • 将模板中的外接矩形切割出来。
  • 使用矩形的长宽比之间的差异使得信用卡的数字矩形框能够被选择出来。
  • 将其进一步细分,与需要识别的信用卡当中的外接矩形resize成同样的大小。
  • 使用for循环依次检测。

模板:

 二值化:(一般被检测的文字为白色区域)

轮廓检测: refCnts, hierarchy = cv2.findContours(xx.copy() , cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

  • 1 因为我们不仅需要轮廓的图像,还需要知道这个轮廓图像对应的标签是啥,所以我们需要计算轮廓,依据每个轮廓所在位置的不同将其进行划分。 这里我们使用OpenCv中的cv2.findContours()函数来进行轮廓检测。函数用法

  • 2 cv2.findContours()函数接受的参数为二值图,即黑白的(不是灰度图),cv2.RETR_EXTERNAL只检测外轮廓,cv2.CHAIN_APPROX_SIMPLE只保留终点坐标, 返回的list中每个元素都是图像中的一个轮廓。

接着,输入图像(银行卡),灰度图,二值化(轮廓检测的输入均为二值图像),预处理(顶帽,SobelX滤波,闭操作*2),轮廓检测(只检测外轮廓),轮廓近似(外接矩形近似,然后根据长宽比滤除不合适的对象。长宽比例不属于数字规范的,滤除掉,剩下的即为包含数字的模块)。

原图:

 

各种处理:(使轮廓检测的结果更准确)

检测的结果: 按照长宽比过滤到不包含数字的区域,只剩下4个区域

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值