信用卡数字识别项目实战:基于OpenCV的实现

版权申诉
5星 · 超过95%的资源 1 下载量 114 浏览量 更新于2024-12-21 收藏 1.3MB RAR 举报
资源摘要信息:"该项目是一个使用OpenCV技术实现的信用卡数字识别实战项目。信用卡数字识别是计算机视觉领域的一个应用实例,涉及到图像处理、模式识别和机器学习等技术。OpenCV是一个开源的计算机视觉和机器学习软件库,它提供了很多常用的图像处理和分析功能。" 知识点1:"OpenCV技术" "OpenCV是一个开源的计算机视觉和机器学习软件库,它提供了很多常用的图像处理和分析功能。在该项目中,我们主要使用了OpenCV来进行图像的灰度化、二值化、轮廓计算等操作。" 知识点2:"图像灰度化" "图像灰度化是图像处理中的一个基本操作,它的目的是将彩色图像转换为灰度图像。在该项目中,我们首先对信用卡图像进行灰度化处理,以便于后续的图像分析和处理。" 知识点3:"图像二值化" "图像二值化是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。在该项目中,我们对灰度化后的图像进行二值化处理,以便于后续的轮廓计算。" 知识点4:"轮廓计算" "轮廓计算是计算图像中物体的边缘,通常用于图像分割和特征提取。在该项目中,我们通过计算轮廓来找到信用卡上的数字区域。" 知识点5:"数字提取" "数字提取是根据计算出的轮廓,遍历每一个轮廓中的数字,根据坐标进行数字提取。在该项目中,我们通过遍历每一个轮廓中的数字,根据坐标进行数字提取,然后通过一些算法进行数字识别。" 知识点6:"模式识别和机器学习" "模式识别和机器学习是计算机视觉领域的重要技术,它们可以帮助计算机理解和解释视觉信息。在该项目中,我们可能使用了一些简单的机器学习算法来进行数字识别。" 知识点7:"计算机视觉" "计算机视觉是研究如何使机器“看”的科学,目标是使机器能通过普通摄像头摄取的图像进行识别和解释。在该项目中,我们主要使用计算机视觉技术来进行信用卡数字的识别。"
2019-12-04 上传
from imutils import contours import numpy as np import argparse import cv2 as cv import myutils def cv_show(name,img): cv.imshow(name,img) cv.waitKey(0) cv.destroyAllWindows() # 先处理template tempalte_img = cv.imread("E:/opencv/picture/ocr_a_reference.png") tempalte_gray = cv.cvtColor(tempalte_img, cv.COLOR_BGR2GRAY) tempalte_thres = cv.threshold(tempalte_gray, 0, 255, cv.THRESH_OTSU | cv.THRESH_BINARY_INV)[1] temp_a, tempalte_contours, temp_b = cv.findContours(tempalte_thres.copy (), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) cv.drawContours(tempalte_img, tempalte_contours, -1, (0, 255, 0), 2) tempalte_contours = contours.sort_contours(tempalte_contours, method="left-to-right")[0] digits = {} # 构建一个字典 for (i, c) in enumerate(tempalte_contours): (x, y, w, h) = cv.boundingRect(c) tempalte_roi = tempalte_thres[y:y + h, x:x + w] #之前一直检测不出正确答案,原因是这里的roi应该是tempalte_thres一部分 #而不是template_gray的一部分! tempalte_roi = cv.resize(tempalte_roi, (57, 88)) digits[i] = tempalte_roi cv_show('template_single',tempalte_roi) #cv_show('template_single',tempalte_roi) #对银行卡进行处理,之所以要做成数字长条,是想通过长条的尺寸比例大小来将自己想要的数字给抠出来。 rectkernel = cv.getStructuringElement(cv.MORPH_RECT,(9,3)) squrkernel = cv.getStructuringElement(cv.MORPH_RECT,(5,5)) image = cv.imread("E:/opencv/picture/credit_card_02.png") image = myutils.resize(image, width=300) image_gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) image_tophat= cv.morphologyEx(image_gray,cv.MORPH_TOPHAT,rectkernel) image_close = cv.morphologyEx(image_tophat,cv.MORPH_CLOSE,rectkernel) cv.imshow("image_tophat",image_tophat) cv.imshow('image_close',image_close) image_thres= cv.threshold(image_close,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)[1] image_contours= cv.findContours(image_thres.copy(),cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE)[1] locs = [] for(n,con) in enumerate(image_contours): (gx,