基本思路
首先把模板中的数字单个分离开,再提取银行卡上的ROI,再将两者的二值图像进行模板匹配,确定出每一个数字,即实现了银行卡号识别,本质上就是模板匹配。
1、模板
- 转换成灰度图,二值化处理,用于轮廓检测。
- 找到所有数字的外轮廓,并画出轮廓。
- 对找到的轮廓排序,将排序集合,每个数字制成一个模板。

2、识别图片
识别银行卡号的话我们只需要识别中间的数字,其他的数字是干扰项
- 读取识别图像并转化为灰度图。
- 进行礼帽操作
- 利用Solb算子进行边缘检测
- Solb算子运算后的图像进行闭操作
- 轮廓检测,我们所需要的这四段数字它们的外接矩形的长宽或者比例是与途中其它元素不同的,我们通过这一特征在轮廓检测返回的队列中筛选出需要的部分,保存下来。
- 对每一组进行轮廓检测、排序(倒序),得到单个数字的轮廓,继续对其外接矩形切片。
- 得到的每个数字的外接矩形矩阵,与模板中每个数字进行匹配,得分最高对应正确数字。
3、代码部分
import cv2
import numpy as np
import imutils
from imutils import contours
# 初始化卷积核
myKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (33, 21))
rectKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 3))
# sqKernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
def cv_show(name, imgs, time):
cv2.imshow(name, imgs)
cv2.waitKey(time)
cv2.destroyAllWindows()
temp = cv2.imread("D:/OpenCV_code/bank_card/temp.jpg")
cv_show("temp"

本文介绍了使用OpenCV进行银行卡号识别的基本思路和步骤。首先,通过模板匹配分离和处理数字模板;然后,识别图片中与模板匹配的数字,排除干扰项;最后,通过代码实现模板匹配,找出并匹配银行卡号中的每个数字。
最低0.47元/天 解锁文章

673

被折叠的 条评论
为什么被折叠?



