实现车牌识别之一--使用Opencv+Minst实现车牌定位识别

分三步走

1车牌的提取

1.1对灰度图先做高斯平滑,canny边缘提取,findcontours 找出长宽比大致为2到5.5之间的矩形。

可能找出来的有好几个。需要做车牌矩形排除

1.2使用size(19,4)的内核开闭运算,找出来的车牌矩形比较理想

像下面两张效果不太理想,车牌数字被截断了。需要进一步精确定位处理。

 

1.3 进行一定的透视变换将某些车牌摆正。

先找出车牌的轮廓最小矩形。因为车牌有可能是倾斜的,使用minAreaRect可以找到最贴近的最小矩形。

但是实际操作发现minAreaRect 面对旋转矩形时还行。面对不规则形状时变现一般。

minAreaRect 返回的四个点坐标

[43.0054, 353.255]
[36.3634, 41.0774]
[270.874, 36.0878]
[277.516, 348.266]

这个负数坐标真的过分,不知道是怎么算出来的...

[142.15, 219.369]
[49.8584, 69.3948]
[174.893, -7.54938]
[267.185, 142.425]

最终还是决定采用直线求交点的方法。利用初中的知识。

设已知的一条线段的起点和终点为(x1,y1),(x2,y2),另一条为 (x3,y3),(x4,y4);首先求出两条线段的一次函数,再联立求出交点坐标

交点公式:
x=(y3x4x2-y4x3x2-y3x4x1+y4x3x1-y1x2x4+y2x1x4+y1x2x3-y2x1x3)/x4y2-x4y1-x3y2+x3y1-x2y4+x2y3+x1y4-x1y3

y=(-y3x4y2+y4x3y2+y3x4y1-y4x3y1+y1x2y4-y1x2y3-y2x1y4+y2x1y3)/y4x2-y4x1-y3x2+x1y3-y2x4+y2x3+y1x4-y1x3
————————————————
版权声明:本文为CSDN博主「Tron_future」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Tron_future/article/details/77828665

Madcola的做法

然后进行透视变换将车牌摆正:

1.4 车牌矩形排除:

使用HSV空间--计算蓝色, 黄色,绿色的像素点是否占总像素的一半以上。是则判定为车牌。下图为算法选中的车牌矩形。我把它作为roi截取出来

1.5 精确定位处理:

具体步骤:先扩大矩形范围, 再使用HSV颜色空间,再定位,缩小边缘。在正常情况下,车身与车牌不同色,可以通过H值的不同轻松区分。但是当车身与车牌颜色相近时,H值就不管用了。

例如下图中的车身其实是淡蓝色的,H=107,S=30

而车牌是深蓝色的,H=107,S=160.所以只能用S值的不同来区分

先看看效果吧(我觉得这效果刚刚的)。


总结:这种精确定位的算法有局限性,很难做到通用,对于不同的输入图片需要调整H,S,V的判断阈值。

 

1.6 楼主现在也束手无策的情形:

黄色车身,识别黄色车牌! (车身与车牌的HSV值几乎一致。完全做不了精确定位)

思前想后之下,突发奇想,既然我后面的数字识别都用了minst , 为什么车牌定位不干脆也使用yolo等物体检测网络来预测呢。

此处静听下回分解。

2车牌数字的分割

2.1 利用投影法进行字体的分割。

效果如图:

3输入minst神经网络得出结果

原图:

输出:(那个点网络识别不了,变成了J)

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值