前言

经过前面的代码处理,已得到身份证上的唯一的号码区域,那么下面的代码是把号码区域切割成单个字符,这一步是为了以后的识别做准备。

代码

//把整个字符图像分割成单个字符图像
//传入一个切割出来的号码区域,输出一个分割好的单个字符的容器
void charRegion(const Mat &char_area, vector<Mat> &char_dst)
{Mat img_threshold;//新建一个全白图像Mat white_base(char_area.size(), char_area.type(), cv::Scalar(255));//相减得到反转的图像Mat reversal_mat = white_base - char_area;
#ifdef DEBUGimshow("号码区域反转", reversal_mat);
#endif // DEBUG//大津法二值化threshold(reversal_mat, img_threshold, 0, 255, CV_THRESH_OTSU); int char_index[19] = { 0 };short counter = 1;short num = 0;bool *flag = new bool[img_threshold.cols];for (int j = 0; j < img_threshold.cols; ++j){flag[j] = true;for (int i = 0; i < img_threshold.rows; ++i){if (img_threshold.at<uchar>(i, j) != 0){flag[j] = false;break;}}}for (int i = 0; i < img_threshold.cols - 2; ++i){if (flag[i] == true){char_index[counter] += i;num++;if (flag[i + 1] == false && flag[i + 2] == false){char_index[counter] = char_index[counter] / num;num = 0;counter++;}}}char_index[18] = img_threshold.cols;for (int i = 0; i < 18; i++){char_dst.push_back(Mat(reversal_mat, Rect(char_index[i], 0, char_index[i + 1] - char_index[i], img_threshold.rows)));}
#ifdef DEBUGfor (int i = 0; i < char_dst.size(); i++){string name = to_string(i);imshow(name, char_dst.at(i));imwrite(name+".png", char_dst.at(i));}
#endif // DEBUG
}

函数调用方式:

Mat src = imread("src.png",0);
vector<Mat> char;
charRegion(src,char);

测试:

输入

输出:

使用OpenCV进行身份证号码字符进行分割相关推荐

  1. Opencv获取身份证号码区域

    记得应该是16年的时候,从一个公开课看到了关于OCR方面的内容,里面讲到了通过OpenCV对身份证号码区域的剪裁以及使用Tess-Two进行文字识别,实现了对身份证号码的识别功能. 断断续续看了点关于 ...

  2. Android Studio+OpenCV 识别身份证号码---识别身份证号码

    上一章使用CLion+OpenCV对身份证号码进行了检测,经过检测我们能拿到身份证号码区域的照片,现在我们对上一章拿到的图片中的数字进行识别 上一章链接:CLion+OpenCV 识别身份证号码--- ...

  3. CLion+OpenCV 识别身份证号码---检测身份证号码

    OpenCV 编译 1.下载OpenCV windows 源码 2.安装CMake(带GUI的) 3.下载MinGW 4.添加环境变量(MinGW的bin目录和CMake的bin目录) 5.在Open ...

  4. Python识别身份证号码并检查是否合法(pysseract,dlib,opencv)

    接下来我将讲述如何利用pysseract.dlib以及OpenCV识别身份证号码并检查其是否合法(包括库文件的安装等). 我参照了以下两篇博客的内容(或者说是这两篇博客的整理以及整合): https: ...

  5. 【身份证识别】基于matlab GUI身份证号码识别【含Matlab源码 014期】

    ⛄一.身份证号码识别简介 1 引言 作为居民身份的象征,身份证是居民身份的唯一标识,它已成为生活中必不可少的证件.在火车站.酒吧等公共场所,流动人口大人员复杂,警察需要对公民的身份证进行核对,排除可疑 ...

  6. 请写代码校验第二代身份证号码有效性。程序接收一个18位的身份证号码和性别,根据以下规则输出号码是有效还是无效。

    请写代码校验第二代身份证号码有效性.程序接收一个18位的身份证号码和性别,根据以下规则输出号码是有效还是无效. 第二代身份证号组成规则: a) 身份证号码(18位)= 地址码(6)+ 出生日期码(8) ...

  7. java代码实现15位身份证号码升级到18位

    转载网址   点击打开链接 转载一份作为记录,真心不错.受教! 18位身份证号码的组成: 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字 ...

  8. 基于深度学习的身份证号码识别(OCR,Opencv,Pytorch)

    文章目录 前言 模型结构 数据集 模型训练 项目结构&源码下载 前言 最近做了一个身份证号码识别项目,在此分享一下.视频效果如下所示,共有两种识别方法,其一就是直接上传身份证号码的截图进行识别 ...

  9. Python+Opencv身份证号码区域提取及识别实现

    前端时间智能信息处理实训,我选择的课题为身份证号码识别,对中华人民共和国公民身份证进行识别,提取并识别其中的身份证号码,将身份证号码识别为字符串的形式输出.现在实训结束了将代码发布出来供大家参考,识别 ...

最新文章

  1. shell脚本实现C程序日志分流和多Terminal显示
  2. 【Python】zip函数
  3. saspython知乎_评分模型效用度量指标如何解析?(含Python、R、SAS代码)
  4. mysql rpm 安装多实例_MySQL多实例安装
  5. linux搭建redis
  6. 有哪些讽刺性极强的文案?
  7. 开课吧python小课学了有用吗-这个神仙技能,让你为所欲为!速来 !
  8. java web 学习 --第八天(Java三级考试)
  9. 物联网学什么编程语言_物联网要学什么
  10. CNDS-markdowm使用方法(^ _ ^)
  11. win10音响左右声道测试软件,win10左右声道不分的三种解决方法【图文】
  12. 移动iptv安装三方软件
  13. Microsoft.Windows.Controls.Ribbon.RibbonWindow 碰到 AvalonDock出现的诡异现象
  14. 同一台虚拟服务器多个域名,一台服务器上可以配置多个域名
  15. ps2模拟器bios3dm_呆萌PS2模拟器bios文件下载|呆萌PS2模拟器专业版下载v3.1.2-乐游网安卓下载...
  16. 数学公式编辑器:MathType 7 for mac
  17. jquery-question
  18. token令牌的含义和操作
  19. [转]明朝出了个张居正 作者:秋风浩荡 -2
  20. 简历石沉大海?程序员简历到底该怎么写?

热门文章

  1. 【数学与算法】步长一维搜索、梯度下降法、最速下降法、牛顿法
  2. mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译
  3. 机器学习数据挖掘笔记_14(GMM-HMM语音识别简单理解)
  4. 局部特征(1)——入门篇
  5. 关于浮点数计算时的精度问题
  6. 无插件Vim编程技巧
  7. 跟我一起写 Makefile(十二)
  8. 2015年浪潮面试题
  9. iOS12.1系统,nav自定义返回后,tabbar偏移问题记录
  10. ftp安装和虚拟用户创建(终于搞清楚了)