对模板进行处理。要先对模板数字 进行轮廓查找
img = cv2.imread("moban.png", 1)
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img1 = cv2.threshold(img1, 0, 255, cv2.THRESH_OTSU|cv2.THRESH_BINARY_INV)[1]
img1_con = cv2.findContours(img1, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[0]
img1_dst = cv2.drawContours(img.copy(), img1_con, -1, (0, 0, 255), 2)
cv2.imshow('1', img1_dst)
然后再将模板数字分割开并保存方便后面进行模板匹配来识别银行卡号。代码如下
l = []
for con in img1_con:
(x, y, w, h) = cv2.boundingRect(con)
l.append(x)
# 将其包围盒按照x坐标排序
(img1_con, l) = zip(*sorted(zip(img1_con, l), key=lambda x: x[1], reverse=False))
# 将模板数字图像分割开
dig = {}
for i, con in enumerate(img1_con):
(x, y, w, h) = cv2.boundingRect(con)
roi = img1[y:y + h, x:x + w]
dig[i] = cv2.resize(roi, (57, 88))
银行卡图片为:
然后再进行银行卡图片的处理。处理的思路就是要获取原图中的数字区域,通过轮廓处理得到四串数字的轮廓,然后再将每一个