首页 > 开发 > Python > 正文

python opencv实现信用卡的数字识别

2024-09-09 19:03:39
字体:
来源:转载
供稿:网友

本项目利用python以及opencv实现信用卡的数字识别

前期准备

导入工具包 定义功能函数

模板图像处理

读取模板图像 cv2.imread(img) 灰度化处理 cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 二值化 cv2.threshold() 轮廓 - 轮廓

信用卡图像处理

读取信用卡图像 cv2.imread(img) 灰度化处理 cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 礼帽处理 cv2.morphologyEx(gray,cv2.MORPH_TOPHAT,rectKernel) Sobel边缘检测 cv2.Sobel(tophat, ddepth=cv2.CV_32F, dx=1, dy=0, ksize=-1) 闭操作 cv2.morphologyEx(gradX, cv2.MORPH_CLOSE, rectKernel) 计算轮廓 cv2.findContours 模板检测 cv2.matchTemplate(roi, digitROI,cv2.TM_CCOEFF)

原始数据展示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

结果展示

在这里插入图片描述

1 前期准备

# 导入工具包# opencv读取图片的格式为b g r# matplotlib图片的格式为 r g bimport numpy as npimport cv2from imutils import contoursimport matplotlib.pyplot as plt%matplotlib inline
# 信用卡的位置predict_card = "images/credit_card_01.png"# 模板的位置template = "images/ocr_a_reference.png"
# 指定信用卡类型FIRST_NUMBER = {  "3": "American Express",  "4": "Visa",  "5": "MasterCard",  "6": "Discover Card"}
# 定义一些功能函数# 对框进行排序def sort_contours(cnts, method="left-to-right"):  reverse = False  i = 0  if method == "right-to-left" or method == "bottom-to-top":    reverse = True  if method == "top-to-bottom" or method == "bottom-to-top":    i = 1  boundingBoxes = [cv2.boundingRect(c) for c in cnts] #用一个最小的矩形,把找到的形状包起来x,y,h,w  (cnts, boundingBoxes) = zip(*sorted(zip(cnts, boundingBoxes),                    key=lambda b: b[1][i], reverse=reverse))  return cnts, boundingBoxes# 调整图片尺寸大小def resize(image, width=None, height=None, inter=cv2.INTER_AREA):  dim = None  (h, w) = image.shape[:2]  if width is None and height is None:    return image  if width is None:    r = height / float(h)    dim = (int(w * r), height)  else:    r = width / float(w)    dim = (width, int(h * r))  resized = cv2.resize(image, dim, interpolation=inter)  return resized# 定义cv2展示函数def cv_show(name,img):  cv2.imshow(name,img)  cv2.waitKey(0)  cv2.destroyAllWindows()

2 对模板图像进行预处理操作

读取模板图像

# 读取模板图像img = cv2.imread(template)cv_show("img",img)plt.imshow(img)
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表