`

银行卡号识别(一) --- 预处理

 
阅读更多

      受到微信钱包的启发,现在决心做一个类似的东东来玩一玩  --------------  银行卡号识别

      凡事要循序渐进,本次我们先来探讨静态银行卡号的识别,识别的方法有很多,那么在识别之前往往还有很多预处理的工作要做,接下来我将一一介绍。
          目标图片                 
 

一、灰度图像

         我们将图像导入后,往往是三通道的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处理,再在另一张图想画出外包矩形区域来。

数字框一般大小有限制,我设定矩形框的面积范围来筛选出每个数字出来,得到以下结果:
                               

 

结果评价:  分割的效果不是特别理想,除了数字外还有部分区域没有处理掉,会给识别带来难度;下面的数字我们也需要想办法消除;第二个数字分割效果不佳。

 

这些问题我将在后面进一步改进!

 

(待续)
 


 
 

  • 大小: 116 KB
  • 大小: 345.4 KB
  • 大小: 35.3 KB
  • 大小: 32.7 KB
  • 大小: 32.9 KB
3
2
分享到:
评论

相关推荐

    用matlab实现银行卡卡号定位并自动切割出卡号部分

    以matlab为平台进行图像处理,预处理银行卡卡号后进行卡号定位,并自动切割出卡号部分的图像。代码注释明确,适合小白阅读。

    基于openCV&amp;Tensorflow的银行卡号识别.zip

    OpenCV(Open Source Computer Vision Library)是一款开源的计算机视觉库,专门为图像和视频处理任务设计,广泛应用于学术研究、工业应用以及个人项目中。以下是关于OpenCV的详细介绍: 历史与发展 起源:OpenCV...

    Python银行卡数字识别项目 (Opencv)

    项目预览: QWQ 那么第一步先梳理一下我们的项目逻辑: 一. 找素材 (数字模板,银行卡照片等) 二. 识别数字则需要我们对数字模板进行处理。因此下面我们开始处理数字模板...3.将已经处理的银行卡图像进行礼帽操作,去

    OCR:基于OpenCV和TesseractOCRiOS的银行卡号识别.zip

    OpenCV(Open Source Computer Vision Library)是一款开源的计算机视觉库,专门为图像和视频处理任务设计,广泛应用于学术研究、工业应用以及个人项目中。以下是关于OpenCV的详细介绍: 历史与发展 起源:OpenCV...

    Opencv实战基于python,银行卡识别、全景图片拼接、OCR图片识别.zip

    OpenCV(Open Source Computer Vision Library)是一款开源的计算机视觉库,专门为图像和视频处理任务设计,广泛应用于学术研究、工业应用以及个人项目中。以下是关于OpenCV的详细介绍: 历史与发展 起源:OpenCV...

    matlab图像处理实例ppt

    matlab零基础入门,银行卡号识别算法的研究之初步图像预处理资料,新手学习教程,学习资源

    Python基于Opencv&Yolov7的银行卡识别系统(源码&教程).zip

    OpenCV(Open Source Computer Vision Library)是一款开源的计算机视觉库,专门为图像和视频处理任务设计,广泛应用于学术研究、工业应用以及个人项目中。以下是关于OpenCV的详细介绍: 历史与发展 起源:OpenCV...

    银行智慧网点调研报告.docx

    工商银行推出的"智能网点",几乎所有的业务都可以通过智能设备自助完成,包括银行卡及密码器的申领,以及5万元以上的大额转账等业务。工商银行的智能网点依托功能丰富的自助设备,通过网点人员现场引导和远程服务相...

    aadhar-uid:从扫描的文档中提取并保护Aadhar编号

    我们经常将扫描的aadhar卡文件提交给银行,政府机关等。我们是否想知道它们如何处理aadhar卡文件? 这是关于从aadhar卡中提取相关信息-12位UID(唯一标识号/ Aadhar编号) 解决方案包括以下四个步骤: 实际扫描的...

    中国电信计费模型:数据模型

    6.2.9 预处理后计费帐务事件(Pre_Processed_Event)实体 245 6.2.10 普通源事件格式(Event_Format_Normal)实体 246 6.2.11 其它源事件格式(Event_Format_Other)实体 247 6.2.12 源事件格式(Event_Format)实体 248 6.2...

Global site tag (gtag.js) - Google Analytics