银行卡号识别(模板匹配)

1、模板预处理

2、卡片图片预处理

3、模板匹配

import cv2
import numpy as np
import myutils
from imutils import contoursdef cv_show(img,name):cv2.imshow(name,img)cv2.waitKey(0)cv2.destroyAllWindows()
#读取模板文件
img=cv2.imread(r"D:\pythonProject\NewProject\PIc\number.png")
#cv_show(img,'number')
#转换灰度图
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#cv_show(gray,'gray_number')
#转换为二值图
ret,ref=cv2.threshold(gray,10,255,cv2.THRESH_BINARY_INV)
#cv_show(ref,'ref')
#检测轮廓
refCnts,hierarchy=cv2.findContours(ref,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
#绘制轮廓
res=cv2.drawContours(img.copy(),refCnts,-1,(0,0,255),2)
#cv_show(res,'res')
#检查绘制轮廓的数量
print(np.array(refCnts).shape)
#排序轮廓(从左到右),返回值:轮廓坐标,boundingBoxes
refCnts,boundingBoxes=contours.sort_contours(refCnts,method="left-to-right")
#print(refCnts)digits={}
#遍历每一个轮廓
for (i,c) in enumerate(refCnts):#计算外接矩形(x,y,w,h)=cv2.boundingRect(c)roi=ref[y:y+h,x:x+w]#重设大小roi=cv2.resize(roi,(57,58))digits[i]=roi
#cv_show(digits[3],'1')
#print('------------',digits)#输入文件处理
#初始化卷积核
rectKernel=cv2.getStructuringElement(cv2.MORPH_RECT,(9,3))
sqKernel=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))#卡片图像读取
image=cv2.imread(r"D:\pythonProject\NewProject\PIc\card.png")#cv_show(image,'image')gray_image=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
high,width=gray_image.shape
gray_image=cv2.resize(gray_image,(int(width / 12), int(high / 12)))
#cv_show(gray_image,'gray_image')
print(gray_image.shape)#礼帽操作(突出更明亮的区域)
tophat=cv2.morphologyEx(gray_image,cv2.MORPH_TOPHAT,rectKernel)
#cv_show(tophat,'tophat')
'''
#加转二值图
ret,ref1=cv2.threshold(tophat,10,255,cv2.THRESH_BINARY_INV)
cv_show(ref1,'ref')
'''
#Sobel算子 检测边缘,ksize=-1相当于3×3
gradX=cv2.Sobel(tophat,ddepth=cv2.CV_32F,dx=1,dy=0,ksize=-1)
#负数取绝对值,与cv2.convertScaleAbs类似
gradX=np.absolute(gradX)
#cv_show(gradX,'1')
#归一化
(minVal,maxVal)=(np.min(gradX),np.max(gradX))
gradX=(255*((gradX-minVal)/(maxVal-minVal)))
gradX=gradX.astype("uint8")
print(np.array(gradX).shape)
#cv_show(gradX,'gradX')#闭操作,通过闭操作(先膨胀,在腐蚀)将数组按每四个一组连起
gradX=cv2.morphologyEx(gradX,cv2.MORPH_CLOSE,rectKernel)
#cv_show(gradX,'gradX')
#二值化处理:THRESH_OTSY会自动寻找合适阈值,适合双峰,需把阈值参数设成0
thresh=cv2.threshold(gradX,0,255,cv2.THRESH_BINARY|cv2.THRESH_OTSU)[1]
#cv_show(thresh,'thresh1')#计算外轮廓
threshCnts,hierarchy=cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
#画轮廓
image_res=cv2.drawContours(gray_image.copy(),threshCnts,-1,(0,0,255),2)
#cv_show(image_res,'image_res')locs=[]
#遍历轮廓
for (i,c) in enumerate(threshCnts):(x,y,w,h)=cv2.boundingRect(c)ar = w/float(h)#选择合适的轮廓区域if ar > 3.5 and ar<4.0:locs.append((x,y,w,h))#im = cv2.drawContours(gray_image.copy(), c, -1, (0, 0, 255), 2)#cv_show(im, 'im')
#排序
locs=sorted(locs,key=lambda x:x[0])
output=[]#遍历每一个轮廓中数字
for (i,(gX,gY,gW,gH)) in enumerate(locs):groupOutput=[]#根据坐标提取每一个组(根据轮廓往外稍扩一些)group=gray_image[gY-3:gY+gH+3,gX-3:gX+gW+3]#cv_show(group,'group')#预处理#二值化group = cv2.threshold(group, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]#cv_show(group, 'group')#轮廓检测groupCnts, hierarchy = cv2.findContours(group, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)#排序cardCnts, boundingBoxes = contours.sort_contours(groupCnts, method="left-to-right")#计算每一组中的每一个数值for c in cardCnts:#找到当前数值的轮廓,resize数值大小,与模板大小一致(x,y,w,h)=cv2.boundingRect(c)roi = thresh[y:y + h, x:x + w]# 重设大小roi = cv2.resize(roi, (57, 58))#cv_show(roi,'roi')scores=[]#在模板中计算每一个的得分for (digit,digitROI) in digits.items():#模板匹配result = cv2.matchTemplate(roi, digitROI, cv2.TM_CCOEFF)(_,score,_,_)=cv2.minMaxLoc(result)scores.append(score)#np.argmax,返回最大值的索引值groupOutput.append(str(np.argmax(scores)))#画出来#cv2.rectangle(gray_image,())cv2.putText(gray_image,"".join(groupOutput),(gX,gY-15),cv2.FONT_HERSHEY_SIMPLEX,0.35,(0,0,255),2)output.extend(groupOutput)
print(output)
#cv_show(gray_image,'gray_imageend')

计算机视觉-OpenCV(银行卡号识别)相关推荐

  1. 计算机视觉-opencv银行卡识别

    1.首先下载opencv-python库,这个库的版本一定要固定 pip install opencv-python==4.1.2.30 2.准备下载模板图片,如下,在代码中命名为1.jpg 3.准备 ...

  2. 计算机视觉---opencv人脸识别

    import cv2#步骤1:载入图像 img = cv2.imread(r'C:\Users\yu\Desktop\1.jpg') img = cv2.resize(img,(int(img.sha ...

  3. 银行卡号识别python_银行卡号识别 基于 OpenCV 光学字符识别(OCR)

    银行卡号识别 基于 OpenCV 光学字符识别(OCR) 今天的博客文章是我们最近关于光学字符识别(OCR)和计算机视觉的系列的延续. 在之前的博客文章中,我们学习了如何安装Tesseract二进制文 ...

  4. 计算机视觉OpenCV之人脸识别的示例(Python)

    计算机视觉之人脸识别看起来很高大上,但是用OpenCV解决很方便,OpenCV真的太强大了.. 直接上代码: #!/usr/bin/env python3import cv2image = cv2.i ...

  5. android opencv 银行卡识别,NDK 开发之使用 OpenCV 实现银行卡号识别

    前言 在日常的开发中,我们有时会遇到添加银行卡的需求,这时候,产品可能会让你仿一下支付宝之类的相机扫描识别银行卡号.很多时候,做这样的需求会去找找稳定的第三方,本文通过 OpenCV 结合识别的需求带 ...

  6. OCR-基于OpenCV、Tesseract的银行卡号识别

    title: 'OCR:基于OpenCV.Tesseract的银行卡号识别' type: categories date: 2016-12-01 16:50:30 categories: OC tag ...

  7. python人脸照片分类_Python OpenCV 人脸识别(一)

    前面介绍了Numpy模块,下面再介绍一个OpenCV模块,就基于这两个库看一下当下很火的人工智能是如何实现的,我们介绍几个:人脸识别(当下非常火的).音视频操作等等.今天先介绍一下静态图片的人脸识别, ...

  8. opencv +数字识别

    现在很多场景需要使用的数字识别,比如银行卡识别,以及车牌识别等,在AI领域有很多图像识别算法,大多是居于opencv 或者谷歌开源的tesseract 识别. 由于公司业务需要,需要开发一个客户端程序 ...

  9. c# opencv车牌识别_opencv +数字识别

    现在很多场景需要使用的数字识别,比如银行卡识别,以及车牌识别等,在AI领域有很多图像识别算法,大多是居于opencv 或者谷歌开源的tesseract 识别. 由于公司业务需要,需要开发一个客户端程序 ...

  10. 共有65款 计算机视觉库/人脸识别开源软件

    转载:https://www.cnblogs.com/Anita9002/p/5038533.html. 引自:http://www.oschina.net/project/tag/316/openc ...

最新文章

  1. 单端信号和差分信号的区别
  2. Java中Date各种相关用法
  3. TensorFlow tf.data 导入数据(tf.data官方教程) * * * * *
  4. 数据分析实战-PUBG数据集EDA
  5. System.Text.Json中时间格式化
  6. python工作状态_[Python设计模式] 第16章 上班,干活,下班,加班——状态模式
  7. Windows Azure奇趣应用之Swingify
  8. java json 对象如何对属性排序_Java对象集合、对象数组如何排序?你需要知道这两种方式...
  9. 渭南师范计算机科学与技术,渭南师范学院计算机科学与技术专业2016年在陕西理科高考录取最低分数线...
  10. python踩坑记录篇,持续更新
  11. LINUX自带库与系统重名怎么办
  12. 【ASUS】win7下安装USB3.0驱动蓝屏死机问题
  13. matlab如何批量去背景,ImageJ怎么消除背景 批量去背景教程
  14. 第二十四天:2019年第九届MathorCup高校数学建模挑战赛A题
  15. 重磅!中国科学技术大学,成立新学院!
  16. 深剖基类和派生类的虚函数表
  17. Java打怪升级道路
  18. 专访前C#编译器组首席工程师Eric Lippert
  19. plant simulation 建模案例分析
  20. 【VAR | 时间序列】应用VAR模型时的15个注意点

热门文章

  1. TM1640显示屏驱动IC驱动6位数码管实例
  2. ApiPost测试接口获取不到session
  3. 关于触摸屏触摸驱动安装步骤
  4. 我说CMM2.0之:风险与机会管理
  5. chrome 窗体高度_js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
  6. SVGA动画在直播源代码的运用——直播礼物的实现
  7. microsoftonenote_OneNote2017官方下载
  8. 计算机模拟试题生成,excel考试题库自动生成多套试题带独立答案页
  9. 51单片机c语言延时一秒,单片机C语言的延时
  10. i2cdetect i2cdump i2cget i2cset用法