目录
实训目的
1、加深对数字图像处理基本理论和常用算法的理解和掌握;培养学生培养独立思考、分工协作、团结奋进的意识;培养不怕困难、勇于开拓的创新精神和求真务实、追求卓越的科学家精神;
2、针对给定的复杂工程问题,培养学生选择合适的数学模型和算法策略,设计高效的技术方案并开发实现,及分析、解释实验结果,判断程序结果是否符合预期,给出合理有效的结论的能力;
3、培养学生针对实际图像处理任务独立开展工作、胜任个体角色的能力;
4、培养学生在完成具体图像处理任务的过程中,能正确运用工程管理方法进行项目的时间管理、质量管理、沟通管理和风险管理等,并能对项目的成本及预期收益进行分析的能力。
实训内容
选择合适的算法,编写程序进行信用卡号识别;制作交互式用户界面,实现一个能读入信用卡图片并识别信用卡号的系统,系统界面上需要对输入图像、识别结果等进行展示。并对实验结果进行分析,评价算法性能。
项目基本要求:
(1)复习并深入理解数字图像处理基本理论,选用合适算法和工具进行开发;
(2)独立设计方案,按照数字图像处理系统的开发流程进行开发;
(3) 使用OpenCV及其它常用的数字图像处理库编写代码,熟悉相关函数的调用;
(4)制作交互式用户界面;
(5)对实验结果进行比较、分析,并总结设计过程中所遇到的问题。
设计方法和基本原理:
1、问题描述(功能要求):
根据实训要求,完成指定系统的开发,要求独立实现,条理清晰,主要(关键代码)须有详细注释,实训报告写清楚实现思路、过程及实验结果,并对实验结果进行分析和评价,图文并茂。
1)选择合适算法对信用卡图片进行预处理,定位卡号区域;
2)使用合适算法对信用卡字符进行分割;
3)使用模板匹配对信用卡数字进行识别;
4)记录相关实验数据。
2、问题的解决方案:
根据任务要求,可以将问题解决分为以下步骤:
1)完成相关模块和第三方库的安装配置;
2)读入信用卡图像;
3)对图像进行降噪、灰度化、二值化、边缘检测、形态学等处理,并通过一定方法对卡号区域进行定位;
4)对信用卡字符进行分割;
5)可采用模板匹配方法,对数字进行识别,并输出识别后的结果;
6)设计信用卡识别的软件界面;
实现思路
-
算法原理
银行卡识别通常是通过图像处理和计算机视觉技术来实现的,主要包括以下几个步骤:
图像预处理部分。将原始图像进行灰度化、滤波、边缘检测和二值化等操作,以便于后续的图像处理。
分割图像区域部分。使用形态学处理和轮廓分割等技术,提取银行卡区域和卡号区域。其中银行卡区域可以采用模板匹配或者基于机器学习的图像分割技术实现。
提取特征部分。针对银行卡区域和卡号区域,采用特征提取技术,提取出关键特征,包括银行卡号码、有效期、持卡人姓名、卡片背面的CVC等信息。
特征匹配和判定部分。将银行卡区域和卡号区域中的特征与预设阈值相匹配,确定是否属于目标银行卡,判定银行卡卡片所属的银行等信息。
输出结果部分。输出识别结果,包括银行卡的基本信息、识别结果的置信度等。
下面是代码中常用到OpenCV的函数和模块:
1. 读取和保存图像:cv2.imread()、cv2.imwrite()。
2. 图像预处理:cv2.cvtColor()、cv2.GaussianBlur()、cv2.Canny()、cv2.threshold()等。
3. 形态学处理:cv2.erode()、cv2.dilate()、cv2.morphologyEx()等。
4. 目标检测和分割:cv2.findContours()、cv2.drawContours()、cv2.minAreaRect()等。
5. 特征提取和匹配:cv2.SIFT()、cv2.SURF()、cv2.ORB()、cv2.matchTemplate()等。
6. 机器学习:cv2.ml.SVM()、cv2.ml.KNearest()等。
在实现银行卡识别算法时,需要根据实际情况进行各种参数的设置,例如二值化阈值、轮廓检测算法、特征匹配算法等。也需要进行数据集的标注和预处理,以便于机器学习算法的训练。通过优化图像处理的流程和算法,可以提高银行卡识别的准确率和速度,实现高效自动化的银行卡识别系统。
2.程序流程图
整个代码主要包含两部分:数字模板的获取和银行卡号识别。其中,数字模板的获取是用户自己准备的,银行卡号识别是在 GUI 界面上进行的,具体流程如下:
1. 用户在 GUI 界面上点击按钮选择数字模板图片和待识别的银行卡图片。
2. 用户选择数字模板图片后,程序将其进行处理,提取出数字轮廓并存储在 `digits` 字典中。同时,数字模板的一些处理结果被显示在 GUI 界面上。
3. 用户选择待识别的银行卡图片后,程序将其进行处理,提取出银行卡轮廓,然后进行数字区域的筛选和识别,并将识别结果显示在 GUI 界面上。
具体的数字模板处理流程包括:
1. 用户选择数字模板图片,程序加载选择的图片文件并显示在 GUI 界面上。
2. 对原始图片进行灰度化处理,然后进行二值化处理,得到二值化图像。
3. 对二值化图像进行轮廓提取,得到数字模板的轮廓,并将其保存在 `digits` 字典中。
4. 在 GUI 界面上显示数字模板的二值化轮廓图像和二值化后的数字区域图像。
具体的银行卡号识别流程包括:
1. 用户选择待识别的银行卡图片,程序加载选择的图片文件并显示在 GUI 界面上。
2. 对原始图片进行处理,提取出银行卡轮廓、数字区域轮廓等图像信息,并将不同的处理结果在 GUI 界面上显示出来。
3. 根据识别模板和阈值等