目标

为了实现pc端,提取一张拍摄的身份证照片中人物的信息,照片背景单一且为浅色,初步使用图像处理知识进行处理。

由浅入深,第一步,使用简单的图片,并且有针对性的对某幅图片进行针对性处理,得到大部分黑色字体的位置框,为后期利用tesseract技术进行文字识别提供区域位置提取。

 

示例效果

 

效果讨论

从效果图可以看出3个问题:

1.不是所有的黑色字体都识别了出来 –>解决:蓝色框相近的合并,并且取边界的最大覆盖面,只要两端有字识别出来,中间就没有问题,也正好适用于tesseract进行连串识别 。

2.人物图像上也有蓝色识别框 –>解决:因为是针对身份证的识别,后期可以进行有针对性的校调。

3.身份证摆放不正 –>解决:一开始考虑只要能识别出黑色就好了,而且tesseract一连串识别最佳并且避免了很多单个框识别的调整问题,所以下一阶段要加上倾斜校正。

 

识别步骤

1.提取rgb图像的r通道得到灰度图(通过对比了rgb联合灰度、r通道、g通道和b通道图像得出的最合适结果)。

2.图像二值化并且反色,使得背景为黑前景为白(findCountours作用对象为白色),针对这幅图选择阈值90,代码中设置了调节条,可以查看不同阈值的处理效果。

3.opencv中findCountours和boundingRect函数进行边框提取,并进行大小过滤,这里选择面积在(30,800)内的矩形框。

4.将边框画在原图,进行显示(经过初步测试,和二值化后毛糙的图片相比,tesseract对原图的提取更加准确)。

 

项目代码

完整的 阶段一 vs2015 项目代码放在github上: https://github.com/CaptainLYN/IDCardRecognization-Stage-1 ,供读者参考。关键代码后有相关注释,方便阅读。

 

结语

非常欢迎读者们的指正和有关讨论,直接留言即可。

版权声明:本文为studylyn原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/studylyn/p/9505573.html