Opencv学习笔记(1)---信用卡数字识别

本文介绍了一个基于OpenCV的信用卡数字识别项目。项目分为六个步骤:读取模板图像并预处理;查找轮廓特征并排序;读取输入图像并预处理;获取轮廓并处理;对每个数字进行检测;最终显示结果。

Opencv学习笔记(1)—信用卡数字识别

记得当时看北大曹健老师的课,感觉他的“八股”写代码法很好,很多时候确实都是套路,所以就想总结下自己看到的套路,帮助自己巩固知识。
以下是自己学习模板匹配问题中结合事例的代码,认为常用的几个步骤

第一步 读入模板图像—>转换为灰度图----->二值化图像

# 绘图展示
def cv_show(name,img):
	cv2.imshow(name, img)
	cv2.waitKey(0)
	cv2.destroyAllWindows()
# 读取一个模板图像
img = cv2.imread(args["template"])
cv_show('img',img)
# 灰度图
ref = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv_show('ref',ref)
# 二值图像
ref = cv2.threshold(ref, 10, 255, cv2.THRESH_BINARY_INV)[1]
cv_show('ref',ref)

第二步 查找轮廓特征 并画出轮廓(模板处理)

注意在查找轮廓的时候要传入二值图像的复制后的,即上面代码的ref.copy(),避免以后使用时影响

ref_, refCnts, hierarchy = cv2.findContours(ref.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)

cv2.drawContours(img,refCnts,-1,(0,0,255),3)
cv_show('img',img)
print (np.array(refCnts).shape) #打印轮廓的个数,调试使用

第三步 编写轮廓排序函数

按照实际要求进行轮廓的排序,应该有的问题不需要这一步,这个信用卡识别为了把模板的0到9的数确保排序正确,进行了轮廓排序操作,同理其他问题由类似的就可以进行相同思路的轮廓排序函数的编写。排序后遍历每个轮廓,然后得到每个数字对应的模板。resize函数是让每个数字对应的模板大小进行合适的调节。

myutils.py文件:
sort_contours是轮廓排序函数
resize函数是调节函数

import cv2

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(*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瞲_大河弯弯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值