银行卡号的识别

news/2024/11/25 13:53:55/

首先对模板数字进行操作 ,得到模板的轮廓。

mode=cv2.imread('mode.png',1)
#读入模板图
mode1 = cv2.cvtColor(mode, cv2.COLOR_BGR2GRAY)
cv2.imshow('mode1',mode1)#模板图转换成灰度图
mode2=cv2.threshold(mode1,10,255,cv2.THRESH_BINARY_INV)[1]
cv2.imshow('mode2',mode2)
#模板灰度图转成二值图
mode_c,mode_h=cv2.findContours(mode2.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
#检测模板轮廓
draw = cv2.drawContours(mode,mode_c,-1,(0,100,100),3,cv2.LINE_AA)
cv2.imshow('draw',draw)
#画出模板轮廓
boundingBoxes = [cv2.boundingRect(c) for c in mode_c]
(mode_c, boundingBoxes) = zip(*sorted(zip(mode_c, boundingBoxes),key=lambda b: b[1][0]))

 得到的数字模板的轮廓图像如下:

 对银行卡进行一定处理,方便框出所需要的数据:

# 读入卡图
card = cv2.imread('card.png', 1)#转换成二值图
card1=cv2.cvtColor(card,cv2.COLOR_BGR2GRAY)
cv2.imshow('card1',card1)
# 初始化卷积核
RK = cv2.getStructuringElement(cv2.MORPH_RECT, (27, 17))
SK = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
#礼帽操作
card2=cv2.morphologyEx(card1,cv2.MORPH_TOPHAT,SK)
cv2.imshow('card2',card2)
#阈值处理
card3=cv2.threshold(card2,20,255,cv2.THRESH_BINARY)[1]
cv2.imshow('card3',card3)

 经过一系列处理的银行卡图像:

#闭操作处理
card4=cv2.morphologyEx(card3,cv2.MORPH_CLOSE,RK)

 闭操作处理得到含有银行卡号的轮廓:

通过一系列的操作如长宽比等框出有效的实际卡号位置,再重新定义合适的模板大小进行处理匹配数字。

#找出轮廓
card_c,card_h=cv2.findContours(card4,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cv2.imshow('card4',card4)
#绘制轮廓
card5=cv2.drawContours(card.copy(),card_c,-1,(0,0,255),2)
cv2.imshow('card5',card5)
#保存有用轮廓
loc=[]
output=[]
for (i,c) in enumerate(card_c):(x,y,w,h)=cv2.boundingRect(c)ar = w / float(h)# 选择合适的区域,根据实际任务来,这里的基本都是四个数字一组if ar > 3.3 and ar < 3.5:# 符合的留下来loc.append((x, y, w, h))
for (i, (X, Y, W, H)) in enumerate(loc):out=[]cv2.rectangle(card, (X - 5, Y - 5), (X + W + 5, Y + H + 5), (0, 100, 255), 2)#提取每段数字group = card1[Y - 5:Y + H + 5, X - 5:X + W + 5]group = cv2.threshold(group, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]#group = cv2.threshold(group, 100, 255, cv2.THRESH_BINARY)[1]group_c,group_h=cv2.findContours(group,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)for c in group_c:# 找到当前数值的轮廓,resize成合适的的大小(x, y, w, h) = cv2.boundingRect(c)roi = group[y:y + h, x:x + w]roi = cv2.resize(roi, (57, 88))# 计算匹配得分scores = []# 在模板中计算每一个得分for (A, B) in md.items():# 模板匹配result = cv2.matchTemplate(roi, B,cv2.TM_CCOEFF)(_, score, _, _) = cv2.minMaxLoc(result)scores.append(score)# 得到最合适的数字out.append(str(np.argmax(scores)))# 画出来out.reverse()cv2.rectangle(card, (X - 5, Y - 5),(X + W + 5, Y + H + 5), (0, 0, 255), 1)cv2.putText(card, "".join(out), (X, Y - 15),cv2.FONT_HERSHEY_SIMPLEX, 0.65, (0, 0, 255), 2)# 得到结果output.extend(out)

 最后的到银行卡号的识别结果如下:


http://www.ppmy.cn/news/305332.html

相关文章

扫描银行卡识别银行卡号

扫描/拍照识别银行卡的过程是怎么样的&#xff0c;银行卡识别的经验如何&#xff0c;本文就银行卡识别小常识做现。 一、银行卡识别的由来 有困难才会有进步&#xff0c;当微信支付愈发盛行的时候&#xff0c;绑定银行卡&#xff0c;输入银行卡账号成了人们在此之前较为困难的…

关于输入银行卡号自动识别所属银行的一个API

关于输入银行卡号自动识别所属银行的一个API 不是为了打广告&#xff0c;这个网址是收费的&#xff0c;和我没有一毛钱关系… 用到这个功能的大都是企业&#xff0c;有需要&#xff0c;老板会掏的啦&#xff08;4500次49元&#xff09; 网址&#xff1a; https://www.juhe.cn/…

银行卡号返回银行信息

支付宝的开放API, 银行卡校验接口 接口URL https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charsetutf-8&cardNo6230580000354174000&cardBinChecktrue 请求方式 GET 请求Query参数 参数名示例值参数类型是否必填参数描述_input_charsetutf-8Str…

通过银行卡号获得银行名称

通过支付宝的一个接口可以返回&#xff1a; 获取方式&#xff1a; 支付宝提供的接口。按以下格式发送HTTP请求即可。 "https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charsetutf-8&cardNo银行卡卡号&cardBinChecktrue" 其中输入上述的银…

银行卡号的编码规则及校验

银行卡号的编码规则 银行卡号由最多19位数字组成。 前6位数字被称为发行者识别号码&#xff08;Issuer Identification Number&#xff0c;缩写为IIN&#xff09;&#xff0c;也称为发卡行识别码&#xff08;Bank Identification Number&#xff0c;简称BIN&#xff09;&…

根据银行卡号查询银行名接口

第一个是值得推荐的&#xff1a;那就是用阿里免费提供的&#xff0c;阿里很强,把银行卡换成自己的哈https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?cardNo62179936********1785&cardBinChecktrue 返回结果&#xff1a; { "cardType": "…

JS填写银行卡号每隔4位数字加一个空格

这篇文章主要介绍了JS填写银行卡号每隔4位数字加一个空格的相关资料,需要的朋友可以参考下 1、原生js写法 !function () {document.getElementById(bankCard).onkeyup function (event) {var v this.value;if(/\S{5}/.test(v)){this.value v.replace(/\s/g, ).replace(/(.{…

C# 银行卡号每4位加一个空格

private void textBox5_KeyDown(object sender, KeyEventArgs e) { //textbox5的keydown事件 if (e.KeyValue 13) { string payno this.textBox5.Text; this.textBox5.Text GetPayNo(payno); //调用方…