首发于https://juejin.cn/post/6924213303124164621,转载注明出处

GitHub

https://github.com/KinghooWei/LicensePlateRecognition

开门见山啦,记得star一下

最终效果图

汽车图片来源于网络

设计思路

项目的编程环境为python3.7.7,编译器使用pycharm2019.3.4 x64,设计一个车牌识别系统,有GUI界面。选择一张有车牌的图片后,完成车牌定位、倾斜校正、字符分割,最后通过k-NN算法对车牌的字母和数字进行识别,将识别结果在GUI界面中显示出来。

车牌定位

车牌定位就是在图片中识别出哪个位置有车牌,是字符分割和字母数字识别的前提,是车牌识别系统的关键和难点。具体算法如下:

  1. 对原始图像进行高斯模糊,减少噪点。

  2. 提取图像边缘。首先将彩色图像转为灰度图gray,利用大核对灰度图进行开操作得到图像open,相当于对灰度图进行涂抹操作,将灰度图gray和开操作后的图像open按1:-1的比例融合得到图像add,以上操作可以将大面积灰度值相似的地方置黑,可以减少车灯、背景、地面、挡风玻璃等细节。接着使用canny算法对融合图像add提取边缘,得到图像canny。


gray

open

add

canny
提取图像边缘
  1. 使用横向长条作为核对边缘图像进行一次闭操作,得到图像close,相当于对边缘横向涂抹,因为一般视角车牌是宽大于高的矩形。再对图像close进行一次开操作,得到图像open2,消除较细的线条和不大的竖向线条,从而将车牌位置的连通区域独立出来。

闭操作close

开操作open2
对边缘进行闭操作和开操作
  1. 查找连通区域,通过最小外接矩形的宽高比2~5.5筛选合适的连通区域。

  2. 将最小外接矩形图像旋转矫正,上下左右向外扩展一点范围,避免连通区域没能覆盖车牌造成影响。

  3. 将连通区域原图转为HSV图像,确定图像的主要颜色,若不为蓝、黄、绿,则排除。按照3种颜色对车牌进行精细定位,缩小范围。

  4. 再次通过图像宽高比2.2~5.3筛选合适的位置,至此车牌定位结束。

车牌定位

字符分割

字符分割连接车牌定位和字符识别两个步骤,起到承上启下的作用,准确的字符分割是准确识别字符的前提,具体算法如下:

  1. 先将RGB图像转为灰度图,再转为二值图像,由于黄牌和绿牌的字符是黑色的,因此要将黄牌和绿牌的二值图像做反转处理。

  2. 车牌的上边缘或下边缘有2颗铆钉,考虑到车牌字符一般为7位,理论上遍历每行像素,若黑白跳变次数大于14次,可以判断该行像素有字符的像素,予以保留,若小于等于14次,可以判断行像素没有字符的像素,将这一整行像素置黑,即可消除铆钉。考虑到车牌倾斜的可能性,项目中将这一阈值设定为8。

  3. 将二值图像的像素值向x轴投射,白色像素越多,投射出的值越高,投射值低于设定阈值时,可以视为字符间隔。由于省市编号与其它编号距离较大,所以字符最大间隔可以视为省市编号与其它编号之间的间隔,再往数前一个间隔,可以得到车牌号的第一个字符。大间隔右边由于字符较多,所以通过连通区域面积最大的5个进行查早,再通过x坐标排序,从而得到其余字符,至此字符分割完成。

字符分割

特征描述

把每个字符的二值图像调整为32*64像素的二值图像,逐行读取像素值,从而得到2048维向量,此向量作为字符的特征。

k-NN分类算法

在模式识别领域中,k-NN算法是一种用于分类和回归的非参数统计方法。在k-NN分类算法中,输入包含k个最接近的特征空间的训练样本,输出是一个分类族群。一个对象的分类是由其邻近样本占多数的类别确定的,k为正整数,通常为奇数。k个最邻近样本中最多的分类类别决定了赋予该对象的类别,若k=1k = 1k=1,则该对象的类别直接由最近的一个节点赋予。

k-NN算法是所有的机器学习算法中最简单的之一。k个最邻近样本都是已经正确分类的对象,虽然没要求明确的训练步骤,但这也可以当作是此算法的一个训练样本集。训练样本是多维特征空间向量,其中每个训练样本带有一个类别标签。算法的训练阶段只包含存储的特征向量和训练样本的标签。k-NN算法的缺点是对数据的局部结构非常敏感。

在分类阶段,k是一个常数,项目中选取k=7k = 7k=7。

一般情况下,可以用欧氏距离作为距离度量。在欧几里得空间中,点x=(x1,x2,...,xn)x = (x_1,x_2,...,x_n)x=(x1​,x2​,...,xn​)和点y=(y1,y2,...,yn)y = (y_1,y_2,...,y_n)y=(y1​,y2​,...,yn​)之间的欧式距离为

d(x,y)=(x1−y1)2+(x2−y2)2+...+(xn−yn)2d(x,y) = \sqrt{(x_1-y_1)^2+(x_2-y_2)^2+...+(x_n-y_n)^2}d(x,y)=(x1​−y1​)2+(x2​−y2​)2+...+(xn​−yn​)2​

k-NN算法分类会在类别分布不均时出现缺陷,也就是说,出现频率较多的样本将会影响测试样本的预测结果。因为样本更多的类别更可能出现在测试点的K邻域,而测试点的属性又是通过k邻域内的样本计算出来的。解决这个缺点的方法之一是在进行分类时将样本到k个近邻点的距离考虑进去。k近邻点中每一个的分类都乘以与测试点之间距离的成反比的权重。

参考

python cv2函数总结resize boxPoints minAreaRect

Python-Tkinter图形化界面设计(详细教程 )

Python3+OpenCV2实现图像的几何变换:平移、镜像、缩放、旋转、仿射

蓝绿黄车牌识别(附Python代码)相关推荐

  1. python绿色蓝色代表什么_蓝绿黄车牌识别(Python)

    GitHub 开门见山啦,记得star一下呀 最终效果图 汽车图片来源于网络 设计思路 项目的编程环境为python3.7.7,编译器使用pycharm2019.3.4 x64,设计一个车牌识别系统, ...

  2. 【图像识别】基于模板匹配实现蓝色、绿色、黄色车牌识别附matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  3. 教程 | 理解和实现自然语言处理终极指南(附Python代码)

     教程 | 理解和实现自然语言处理终极指南(附Python代码) 时间 2017-02-16 14:41:39 机器之心 原文  http://www.jiqizhixin.com/article ...

  4. 基于PCA方法的ORL人脸识别及Python代码实现

    基于PCA方法的ORL人脸识别及Python代码实现 PCA算法 方案设计 代码实现 结果分析 参考文献 PCA的理论知识已经有很多博客做了清晰的解释,主要概括为找到投影的面使得类间误差最大,转化为找 ...

  5. 基于TextRank算法的文本摘要(附Python代码)

    基于TextRank算法的文本摘要(附Python代码): https://www.jiqizhixin.com/articles/2018-12-28-18

  6. python 合并工作簿_Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码)...

    Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码) 现实工作中经常遇到将零散的原始数据合并统计的工作要求,如月度统计或年度统计等.原始数据的收集大多是按时间(如日期或小时)进 ...

  7. XGBoost参数调优完全指南(附Python代码)

    XGBoost参数调优完全指南(附Python代码) 译注:文内提供的代码和运行结果有一定差异,可以从这里下载完整代码对照参考.另外,我自己跟着教程做的时候,发现我的库无法解析字符串类型的特征,所以只 ...

  8. python随机森林变量重要性_推荐 :一文读懂随机森林的解释和实现(附python代码)...

    原标题:推荐 :一文读懂随机森林的解释和实现(附python代码) 作者:WilliamKoehrsen:翻译:和中华:校对:李润嘉 本文约6000字,建议阅读15分钟. 本文从单棵决策树讲起,然后逐 ...

  9. Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码)

    Excel:快速合并多张表格或多个文件(工作簿)的数据(附Python代码) 现实工作中经常遇到将零散的原始数据合并统计的工作要求,如月度统计或年度统计等.原始数据的收集大多是按时间(如日期或小时)进 ...

最新文章

  1. python 字典
  2. python汉字编码错误_python解决汉字编码问题:Unicode Decode Error
  3. SpringMVC之源码分析--LocaleResolver和ThemeResolver应用
  4. LZMA demo挑选使用备忘
  5. linux忘记mysql的密码忘记了_linux忘记mysql密码找回方法
  6. Matlab图像处理创新实践-实验4【综合设计大实验——GUI综合设计】
  7. 逆向工程核心原理读书笔记-代码注入
  8. Android--------从一个包中的Avtivity创建另外另外一个包的Context
  9. 程序员的大恩人永远地离开了
  10. docker登录mysql数据库_从docker容器连接到远程MySQL数据库
  11. numpy 高阶函数 —— np.histogram
  12. sdi线缆标准_影片创作与未来标准监看——监视器DP-V2421使用手记
  13. 跨5合并dnf无限连接服务器,不妨一试!跨5等跨区卡登陆卡黑屏解决办法分享
  14. 《职场动物进化手册》笔记整理
  15. golang操作sqlite3
  16. 学习笔记 Tianmao 篇 自定义 ToolBar
  17. [BZOJ2959]长跑——新技能:LCT+缩圈
  18. python+appium在使用swipe滑动时,报错The swipe did not complete successfully的解决办法
  19. C# 自定义控件,日期时间选择输入插件
  20. leet160:相交链表

热门文章

  1. js控制禁用退格键回到上一个页面
  2. RBF技术实现“双花漏洞”研究
  3. 测试地图长度和高度软件,‎App Store 上的“海拔测量仪-集指南针和GPS实时高度测距仪二合一”...
  4. 即时通讯sdk哪一个好?
  5. excel填充序列_excel填充序列不见了怎么办-excel
  6. Android / iOS 招聘
  7. java得到几天前的日期
  8. RabbitMQ学习
  9. 19上海网络赛 Light bulbs (差分)
  10. 数组数据通过sql语句转为数据库表衔接到from或join后进行直接或关联查询