# NumMatch **Repository Path**: kellyworld0/NumMatch ## Basic Information - **Project Name**: NumMatch - **Description**: 这是一个基于OpenCV的信用卡数字自动识别系统。它先提取0-9数字的模板形状,然后通过图像处理找到信用卡上的数字区域,再将每个数字与模板进行匹配,找出最相似的数字,最后按顺序输出完整卡号并识别发卡机构类型。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-21 - **Last Updated**: 2026-04-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Digital【Num】 Match - 信用卡号识别系统 基于 OpenCV 和模板匹配的信用卡数字识别系统,能够从图片中提取信用卡区域并自动识别卡号,同时根据首位数字判断卡类型(Visa、MasterCard、American Express 等)。 ## 功能特点 - 自动定位信用卡上的数字区域 - 基于模板匹配的数字识别(0-9) - 支持卡类型识别(Visa、MasterCard、American Express、Discover Card) - 可视化处理过程(灰度图、二值图、轮廓检测等) - 支持自定义输入图片和模板图片 ## 项目结构 ├── digital_match.py # 主程序 ├── myutils.py # 工具函数(轮廓排序、图像缩放) ├── template/ # 模板图片文件夹(需包含数字0-9的模板) ├── images/ # 待识别的信用卡图片 └── README.md # 项目说明文档 ## 环境依赖 - Python 3.x - OpenCV - NumPy - imutils 安装依赖: ```bash pip install opencv-python numpy imutils ``` ## 使用说明 ### 1. 准备模板图片 模板图片应包含数字 0-9 的清晰样本,每个数字为一个独立的轮廓区域,排列顺序为从左到右。 示例模板图片建议尺寸适中,背景为黑色数字为白色(二值图像)。 ### 2. 运行主程序 ``` python digital_match.py --image images/credit_card.jpg --template images/template.jpg ``` 参数说明: - `--image`:待识别的信用卡图片路径 - `--template`:数字模板图片路径 ### 3. 输出结果 程序会依次显示以下图像处理过程: - 模板图像及其轮廓 - 输入图像的灰度图、礼帽操作、Sobel 梯度、闭操作、二值图等 - 最终识别结果图像,信用卡号区域用红色矩形框出,并标注识别出的卡号 - 控制台输出卡类型和完整卡号 示例输出: ``` Credit Card Type: Visa Credit Card #: 4111111111111111 ``` ## 算法流程 1. **模板处理** - 读取模板图像 → 灰度化 → 二值化 - 提取轮廓并排序(从左到右) - 将每个数字区域缩放为统一大小(57×88),存储为模板字典 2. **信用卡图像处理** - 图像缩放、灰度化 - 礼帽操作(突出亮区域) - Sobel 梯度计算(水平方向) - 闭操作(连接数字区域) - Otsu 自动阈值分割 - 再次闭操作(填充数字内部空洞) 3. **数字区域检测** - 查找轮廓 → 根据宽高比(2.5~4.0)筛选候选区域 - 按从左到右排序 4. **数字识别** - 对每个候选区域提取数字子图 - 二值化、查找单个数字轮廓 - 将每个数字缩放为 57×88,与模板匹配(`cv2.TM_CCOEFF`) - 取匹配得分最高的数字作为识别结果 5. **结果输出** - 绘制矩形框和卡号文字 - 根据首位数字判断卡类型 ## 参数调整 如需适配不同信用卡图片,可调整以下参数: - `rectKernel = (9, 3)`:闭操作核大小,影响数字区域的连接程度 - `sqKernel = (5, 5)`:二次闭操作核大小 - 轮廓筛选条件:`ar > 2.5 and ar < 4.0`(宽高比),`w > 40 and w < 55`(宽度),`h > 10 and h < 20`(高度) - 模板数字缩放尺寸:`(57, 88)` ## 注意事项 - 输入图像应清晰,数字区域尽量水平,避免严重倾斜 - 模板图片的数字排列必须从左到右,且每个数字外轮廓清晰 - 仅适用于标准凸版印刷体数字(OCR-A 或类似字体) - 不支持手写数字或艺术字体 ## 扩展建议 - 可替换模板匹配为深度学习模型(如 CNN)提高识别鲁棒性 - 可增加图像倾斜校正模块 - 可支持多行卡号识别