使用OpenCV进行身份证号码字符进行分割
前言
经过前面的代码处理,已得到身份证上的唯一的号码区域,那么下面的代码是把号码区域切割成单个字符,这一步是为了以后的识别做准备。
代码
//把整个字符图像分割成单个字符图像
//传入一个切割出来的号码区域,输出一个分割好的单个字符的容器
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进行身份证号码字符进行分割相关推荐
- Opencv获取身份证号码区域
记得应该是16年的时候,从一个公开课看到了关于OCR方面的内容,里面讲到了通过OpenCV对身份证号码区域的剪裁以及使用Tess-Two进行文字识别,实现了对身份证号码的识别功能. 断断续续看了点关于 ...
- Android Studio+OpenCV 识别身份证号码---识别身份证号码
上一章使用CLion+OpenCV对身份证号码进行了检测,经过检测我们能拿到身份证号码区域的照片,现在我们对上一章拿到的图片中的数字进行识别 上一章链接:CLion+OpenCV 识别身份证号码--- ...
- CLion+OpenCV 识别身份证号码---检测身份证号码
OpenCV 编译 1.下载OpenCV windows 源码 2.安装CMake(带GUI的) 3.下载MinGW 4.添加环境变量(MinGW的bin目录和CMake的bin目录) 5.在Open ...
- Python识别身份证号码并检查是否合法(pysseract,dlib,opencv)
接下来我将讲述如何利用pysseract.dlib以及OpenCV识别身份证号码并检查其是否合法(包括库文件的安装等). 我参照了以下两篇博客的内容(或者说是这两篇博客的整理以及整合): https: ...
- 【身份证识别】基于matlab GUI身份证号码识别【含Matlab源码 014期】
⛄一.身份证号码识别简介 1 引言 作为居民身份的象征,身份证是居民身份的唯一标识,它已成为生活中必不可少的证件.在火车站.酒吧等公共场所,流动人口大人员复杂,警察需要对公民的身份证进行核对,排除可疑 ...
- 请写代码校验第二代身份证号码有效性。程序接收一个18位的身份证号码和性别,根据以下规则输出号码是有效还是无效。
请写代码校验第二代身份证号码有效性.程序接收一个18位的身份证号码和性别,根据以下规则输出号码是有效还是无效. 第二代身份证号组成规则: a) 身份证号码(18位)= 地址码(6)+ 出生日期码(8) ...
- java代码实现15位身份证号码升级到18位
转载网址 点击打开链接 转载一份作为记录,真心不错.受教! 18位身份证号码的组成: 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字 ...
- 基于深度学习的身份证号码识别(OCR,Opencv,Pytorch)
文章目录 前言 模型结构 数据集 模型训练 项目结构&源码下载 前言 最近做了一个身份证号码识别项目,在此分享一下.视频效果如下所示,共有两种识别方法,其一就是直接上传身份证号码的截图进行识别 ...
- Python+Opencv身份证号码区域提取及识别实现
前端时间智能信息处理实训,我选择的课题为身份证号码识别,对中华人民共和国公民身份证进行识别,提取并识别其中的身份证号码,将身份证号码识别为字符串的形式输出.现在实训结束了将代码发布出来供大家参考,识别 ...
最新文章
- shell脚本实现C程序日志分流和多Terminal显示
- 【Python】zip函数
- saspython知乎_评分模型效用度量指标如何解析?(含Python、R、SAS代码)
- mysql rpm 安装多实例_MySQL多实例安装
- linux搭建redis
- 有哪些讽刺性极强的文案?
- 开课吧python小课学了有用吗-这个神仙技能,让你为所欲为!速来 !
- java web 学习 --第八天(Java三级考试)
- 物联网学什么编程语言_物联网要学什么
- CNDS-markdowm使用方法(^ _ ^)
- win10音响左右声道测试软件,win10左右声道不分的三种解决方法【图文】
- 移动iptv安装三方软件
- Microsoft.Windows.Controls.Ribbon.RibbonWindow 碰到 AvalonDock出现的诡异现象
- 同一台虚拟服务器多个域名,一台服务器上可以配置多个域名
- ps2模拟器bios3dm_呆萌PS2模拟器bios文件下载|呆萌PS2模拟器专业版下载v3.1.2-乐游网安卓下载...
- 数学公式编辑器:MathType 7 for mac
- jquery-question
- token令牌的含义和操作
- [转]明朝出了个张居正 作者:秋风浩荡 -2
- 简历石沉大海?程序员简历到底该怎么写?