1. 前言
本文对利用OpenCV进行信用卡数字识别的流程进行复习,也复习一下里面的一些函数的用法,学得快忘得也很快,不复习不写个博客笔记真的很快就忘记了哈哈哈哈。
2. 先做好数字匹配的模板
- (1)我们的模板是这个样子的数字序列,接下来对一个一个数字做好分割和建立一个字典dict方便做匹配。
- (2)读入图像并二值化
-
# 导入工具包 from imutils import contours import numpy as np import cv2 # 读取一个模板图像 img = cv2.imread(r'ocr_a_reference.png') cv_show('img',img) # 灰度图 ref = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv_show('ref',ref) # 二值图像 #阈值是10,#cv2.THRESH_BINARY_INV 大于阈值部分被置为0,小于部分被置为255 ref = cv2.threshold(ref, 10, 255, cv2.THRESH_BINARY_INV)[1] #返回值第二个是图像,只取第二个 cv_show('ref',ref)
-
(3)寻找外轮廓并绘制
# 计算轮廓 #cv2.findContours()函数接受的参数为二值图,即黑白的(不是灰度图) #,cv2.RETR_EXTERNAL只检测外轮廓,cv2.CHAIN_APPROX_SIMPLE只保留终点坐标(指定保留轮廓的方法) #返回的list中每个元素都是图像中的一个轮廓,这个list就是refCnts ref_, refCnts, hierarchy = cv2.findContours(ref.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) #cv2.drawContours(image, contours, contourIdx, color, thickness=None, lineType=None, hierarchy=None, maxLevel=None, offset=None) #参数分别是3维色彩的原图,轮廓列表,画第几个轮廓,画的颜色(BGR 0,0,225)表示红色画 #线宽3(如果是-1(cv2.FILLED),则为填充模式),线型 cv2.drawContours(img,refCnts,-1,(0,0,255),3) #-1就是画全部轮廓 cv_show('img',img)