受到微信钱包的启发,现在决心做一个类似的东东来玩一玩 -------------- 银行卡号识别
凡事要循序渐进,本次我们先来探讨静态银行卡号的识别,识别的方法有很多,那么在识别之前往往还有很多预处理的工作要做,接下来我将一一介绍。
目标图片
一、灰度图像
我们将图像导入后,往往是三通道的RGB图像,这样的话计算量将非常的庞大,给识别带来了不必要的麻烦,所以,我们首先将图像转成灰度图像:
二、二值化处理
在转变成了灰度图像之后,为了进一步减小图像的复杂度,我们对图像进行二值化处理(这里根据图片的实际情况设定阈值,此时为28):
cvThreshold(temp, binary, 28, 255, CV_THRESH_BINARY);
得到:
三、图像腐蚀
为了使图像中的数字部分更加的明显,我们采用图形学中的腐蚀对图片中的数字部分进行膨胀!这里要注意,腐蚀是对亮度高的而言,所以对于亮度低的数字来说,腐蚀处理即为膨胀处理,采用默认的3*3模板腐蚀一次即可,看具体情况适当调整。
cvErode(binary, erode, NULL, 1);
得到:
四、数字分割
在运用机器学习算法之前,我们需要把一个一个的数字分割开来,这里我们采用寻找轮廓,得到相应的外包矩形区域,在进行简单的筛选得到每个数字的区域。
//寻找轮廓来分割数字
IplImage *imgContour = cvCreateImage(cvGetSize(img), 8, 1);;
cvCopy(erode, imgContour);
CvSeq *contour;
CvMemStorage *storage = cvCreateMemStorage(0);
cvFindContours(imgContour, storage, &contour, sizeof(CvContour),CV_RETR_LIST, CV_CHAIN_APPROX_NONE);
//cout << a;
for( ; contour != NULL; contour = contour -> h_next )
{
CvRect rect = cvBoundingRect( contour, 0 );
cout << rect.width * rect.height << endl;
if(rect.width * rect.height > 1000 && rect.width * rect.height <1800)
cvRectangle( erode, cvPoint( rect.x , rect.y ),cvPoint( rect.x + rect.width, rect.y + rect.height ), cvScalar(0,0,0), 0 );
}
注意:这里cvFindContours函数会对图片进行改动,所以要用另一张图来进行cvFindContours处理,再在另一张图想画出外包矩形区域来。
数字框一般大小有限制,我设定矩形框的面积范围来筛选出每个数字出来,得到以下结果:
结果评价: 分割的效果不是特别理想,除了数字外还有部分区域没有处理掉,会给识别带来难度;下面的数字我们也需要想办法消除;第二个数字分割效果不佳。
这些问题我将在后面进一步改进!
(待续)
相关推荐
这个"银行卡扫描识别卡号demo"是实现这一功能的一个实例,它能够有效地帮助用户自动提取银行卡上的卡号信息,极大地提高了输入的效率和准确性。 首先,该技术基于图像处理和机器学习算法。在描述中提到,无论是平的...
在IT行业中,银行卡号识别是一项重要的技术应用,它主要用于自动识别和处理银行账户信息,尤其在支付、转账、金融分析等场景中发挥着关键作用。本文将深入探讨银行卡号识别的相关知识点。 首先,银行卡号识别涉及到...
在数字化时代,自动识别银行卡号已经成为金融、电商等领域的核心技术之一。本文将深入探讨一个基于深度学习的银行卡号识别系统,该系统运用了卷积神经网络(CNN)技术,并配备了图形用户界面(GUI),便于用户操作。...
总之,银行卡号识别是一个涉及图像处理、计算机视觉和OCR技术的综合应用,通过OpenCV和Tesseract的合理组合,可以实现高效且准确的自动识别。在实际项目中,根据具体需求,可能还需要考虑到性能优化、多线程处理、...
"通过银行卡号识别银行卡名称"这一技术使得用户无需手动输入复杂的银行信息,只需提供银行卡号就能自动识别所属银行,大大提高了用户体验。这篇文档将详细介绍如何利用提供的资源实现这一功能。 首先,我们有两个...
QT+OpenCV+OCR 身份证号码与银行卡号识别技术是计算机视觉领域的一个重要应用,主要用于自动识别图像中的文字信息。在这个特定的项目中,我们看到一个利用QT图形界面库,OpenCV图像处理库,以及OCR(Optical ...
【银行卡号识别Demo(Windows程序)】是一款基于OCR(Optical Character Recognition,光学字符识别)技术的应用,专门针对银行卡号的自动定位与识别。在金融信息化的今天,自动化的银行卡号识别技术对于提升银行...
【扫描银行卡识别卡号的Demo】是一个用于演示如何利用技术手段自动识别并提取银行卡号的应用程序。这个Demo展示了先进的图像处理和光学字符识别(OCR)技术在金融领域的实际应用,帮助用户快速、准确地获取银行卡上...
银行卡号识别是金融服务领域中的一个重要环节,它在保障交易安全性和便捷性上扮演着关键角色。随着人工智能和深度学习技术的发展,利用深度学习方法进行银行卡号识别的准确性和效率得到了显著提升。本文介绍了基于...
在IT行业中,银行卡号识别是一项重要的技术,尤其在金融、支付和数据分析等领域有着广泛应用。本项目专注于使用MATLAB语言来实现这一功能,通过对输入的银行卡图片进行处理,从而分割出清晰可读的银行卡号。接下来,...
在识别银行卡号之前,我们需要对图片进行一系列预处理步骤,包括灰度化、二值化和噪声消除。灰度化是将彩色图像转换为单色图像,减少计算复杂性;二值化则是将图像转化为黑白色,便于后续处理;噪声消除可以使用中值...
在银行卡识别场景中,YOLO首先会检测出图像中的银行卡区域,通过预先训练的模型,能够在单次前向传播过程中同时预测出图像中的多个物体并定位它们。对于银行卡这种相对规则的形状,YOLO能够准确地框选出卡片的边界,...
1. 图像预处理:在识别银行卡号之前,首先需要对拍摄的银行卡图片进行预处理,包括灰度化、二值化、去噪、倾斜校正等步骤,以便突出银行卡号码区域,降低后续识别的难度。 2. 特征提取:使用如边缘检测(Canny算法...
基于深度学习的银行卡号识别系统是一项涉及图像处理、机器学习、特别是深度学习技术的综合性技术应用。该系统的目的在于提升用户在移动支付平台绑定银行卡时的效率和准确性,避免了手动输入银行卡号的繁琐与错误率,...
在本项目"opencv实战 - 银行卡数字识别项目"中,我们将深入探讨如何使用OpenCV库,一个强大的开源计算机视觉库,来处理图像并识别银行卡上的数字。这个项目的核心在于利用Python编程语言和PyCharm开发环境,将OpenCV...
本篇文章主要探讨了如何使用OpenCV这一开源计算机视觉库来实现银行卡号识别算法。OpenCV是计算机视觉领域广泛使用的库,支持多种编程语言,如C、C++、Python等,并且能够运行在Linux、Windows、Mac OS等操作系统平台...
Python银行卡卡号自动识别系统是一种高效且便捷的工具,它结合了PyQt5图形用户界面(GUI)框架和OpenCV图像处理库,用于自动化提取银行卡上的卡号信息。以下是对这个系统的详细介绍: **1. 银行卡卡号识别原理** ...
OpenCV(开源计算机视觉库)作为一种强大的图像处理工具,被广泛应用于各种图像识别任务,包括银行卡号识别。本文将深入探讨如何利用OpenCV实现这一目标。 一、OpenCV简介 OpenCV是一个跨平台的计算机视觉库,包含...
2. 帧差法检测运动物体:在银行卡识别场景中,如果银行卡是静止的,可以跳过此步骤。但如果银行卡在移动,可以利用帧差法来检测银行卡的位置。 3. 物体检测:OpenCV中的Haar级联分类器或HOG+SVM方法可以用于银行卡...
本文将深入探讨如何利用OpenCV和模板匹配技术来实现信用卡和银行卡号的自动识别。模板匹配是图像处理中一种常用的技术,通过在大图中寻找小图的最相似区域,以达到识别目的。 首先,我们要理解模板匹配的基本原理。...