基于OpenCV的银行卡号识别算法研究
董延华,陈中华,蔡喜欣,黄 雨*
【摘 要】互联网+战略的提出及移动互联技术迅速普及,使用基于手机移动端的支付业务越来越频繁.本文针对移动终端支付时需要输入银行卡号,存在复杂性、易忘性、易错性、风险性等问题,提出了一种基于OpenCV的快捷银行卡号识别方法.重点阐明了这一方法的实现基本过程及所需要的OpenCV函数,从而完整实现了基于移动端的识别银行卡号技术,在移动互联网络及电子支付等方面具有一定的实用价值,同时也为数字字符的识别技术提供了借鉴. 【期刊名称】吉林师范大学学报(自然科学版) 【年(卷),期】2017(038)003 【总页数】4
【关键词】OpenCV;银行卡号;数字识别;模式识别
随着互联网+战略推动电子商务的迅猛发展,网络支付已然成为人们生活重要的支付形式.根据最新报告显示,2016年“双十一”全网销售额1 770.4亿元,移动终端交易所占比为82.04%.
目前,人们越来越依赖移动终端支付如手机充值、购物付款、快捷转账、红包提现等等都可以通过手机进行操作.这就需要将手机和银行卡绑定,传统手动输入银行卡号码,存在容易忘记、容易出错、输入速度慢、用户体验不足等问题. 人们在体验互联网带来的便捷购物方式的同时,对基于手机的移动支付提出了更高要求.所以,在移动终端上更简洁地识别出银行卡号,进而快速准确地完成银行卡与移动支付方式的绑定成为研究的热点.本文将着重研究基于OpenCV的银行卡识别系统的实现.
1 基于OpenCV卡号识别方案
OpenCV(Open Source Computer Visual Library),是一种跨平台(Linux、Windows、Mac OS等操作系统)开源的计算机视觉库,由一系列的C函数和一部分C++类组成,包含了图像处理,模式识别,机器学习等各种算法,同时提供了Python、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法,因此极大地方便了图像处理和视频技术的二次开发.
OpenCV具备强大的图像处理和矩阵运算能力,有效提高开发效率和程序运行的可靠性[1].
OpenCV主体分为五个模块,其中四个模块如图1所示.
本文基于OpenCV对银行卡号进行识别,将拍摄到的或者预先保存的银行卡图像进行灰度化、二值化、降噪等先期处理工作,再定位银行卡号,最后对银行卡号进行识别比对工作,将识别到的卡号以文本形式输出,并存储于系统中,简化繁琐的手工录入.具体流程图如图2所示.
2 图像预处理
2.1 灰度化
通常拍摄或者保存的银行卡图像都是彩色图像,处理图像的时候,要分别对RGB三种颜色分量进行处理,加大计算量与计算时间.灰度图像就足以表现卡号的形态特征,并且比彩色图像所占存储空间小.为了优化系统,必须把原信用卡图像转换成8位的灰度值图像后,继续进行后面的工作.
灰度化的方法有四种.其中分量法、平均法、最大值法这三种方法实现简单,但只对红蓝绿三个分量做同等处理,并没有体现出不同分量的重要性.第四种加权平均法,可以为三个分量设置不同的权值,体现每个分量不同的重要性,使得
灰度化结果更为合理,更符合实际应用的需要,是目前最常用的方法. 第四种加权平均法的具体算法如下: f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j). (1) 2.2 二值化
原图像灰度化处理后,得到的灰度图像仍然不方便处理,所以需要进行下一步的二值化处理.二值化即图像中只包含两种像素值,255代表白色和0代表黑色.二值化处理需要通过函数计算出一个阈值T分割所有像素点,大于阈值的像素点变为255白色,小于阈值的像素点变为0黑色[3].二值化处理后的图像只包含两种像素值,从而将目标待识别号码与背景图像分离出来,方便进行后续操作. . (2)
在OpenCV中,通过cvAdaptiveThreshold()函数得到.具体方法如下: cvAdaptiveThreshold(const CVArr* yuantu,CvArr* xintu,double yuzhi,double
zuidazhi,threshold_type=CV_THRESH_BINARY,int
block_size(b)=3,double param1=5).
将block_size的值设定为23,此值需设置大一些,阈值的“自适应程度”比较低,这样才能对图像进行二值化处理. 2.3 噪声去除
手机通过摄像头识别银行卡时,由于存在各种外界干扰因素,所以获取到的图像会带有噪声,这会影响卡号的识别.所以需要将噪声减少,甚至去除.在
基于OpenCV的银行卡号识别算法研究



