前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【干货】C++ OpenCV案例实战---卡号获取

【干货】C++ OpenCV案例实战---卡号获取

作者头像
Vaccae
发布2019-07-24 13:17:15
9280
发布2019-07-24 13:17:15
举报
文章被收录于专栏:微卡智享微卡智享

前言

前面我们学习了《【干货】C++ OpenCV案例实战---卡片截取(附代码)》,根据照出来的照片直接截取到卡片后,在卡片识别里面下一步我们肯定就会用到了卡号的获取

实现思路

从上一篇里面我们已经获取到卡号,如下图右边红框内的

当我们已经定位好卡片后,下一步我们就要获取卡号然后再进行识别了,理论上来说,我们通过上一步截取到卡片后,根据卡号在右下角开始偏移多少来获取卡号即可,如下图

通过右下角我们设置多少的偏移值后,然后找到起点设定一个固定的矩形大小,截取这一块即可实现卡号的截取,但是这会有个问题,如果我们第一步截取的有问题,因为背景的原因,造成下面截取的高度增加了,按这个固定的比例来获取就会有偏差,所以我考虑了另一种方案。

思路呢还是通过轮廓查找,我们可以看到,当卡号截取出来后,卡片内部的结构都是固定不变的,所以我们通过内部定位再偏移找卡号要比从右下角精确的多,如下图

通过获取到红色的特征这里,去偏移定位找绿色的框。

代码实现

我们接上次《【干货】C++ OpenCV案例实战---卡片截取(附代码)》的代码,在这个基础上我们进行处理。


用Canny边缘提取,转灰度图--高斯模糊--形态学闭操作--Canny边缘提取

显示效果

红框为处理后的结果


寻找轮廓,画出图中所有的轮廓来,我们看看

然后运行一下看看效果

可以看到右图里面画出了所有的找到的轮廓,我们怎么定位用蓝色线的那个区域了,通过分析了一下,我们可以看到有几个特点:

  1. 区域的长度超过了卡号长度的一半
  2. 区域形成的矩形的旋转值很低,可以忽略

修改查找区域的设置,条件为矩形长度在图片长度的一半,旋转度小于3

然后我们再重新运行一下看看

可以看出,我们直接就定位到了要找的区域。


根据固定区域进行偏移截取

我们根据最小矩形的中心点,进行了向后偏移50,向下偏移了20,做为矩形的左上角点,然后画了个长度为130,高度为20的矩形(这个偏移量需要多次测试后找到最佳的位置,当然找到后就不需要再更改了)

下面的我们运行的效果

可以看到,红框里我们把卡号直接全部截取出来了,这个截取完后就可以进行OCR等识别了,关于识别这块,后面等学会了后再来更新。


-END-

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档