系统介绍

   使用STM32F103RCT6作为主控,摄像头使用OV7670(带FIFO)。STM32进行了16倍频。识别过程分别为:图像采集,二值化,识别车牌区域,字符分割,字符匹配。

识别过程分析

1.图像采集:

   通过OV7670摄像头进行图像采集,采集的图像大小为320*240像素,像素格式为RGB565。每个像素由两字节组成,第一字节的高五位是Red,第一字节的低三位和第二字节的高三位组成Green,第二字节的低五位是Blue。

2.二值化:

   二值化就是让图像的像素点矩阵中的每个像素点的灰度值为0(黑色)或者255(白色),让整个图片呈现出只有黑色和白色的效果。二值化后的图像中灰度值范围是0或者255。
   怎样让像素点的灰度值转为0或者255?假如灰度值为220的一个像素点,二值化后应该为0还是255?这时候需要设定一个阈值来对像素点进行设置。
   常用二值化方法:
   1、取中值
      设置阈值为127,灰度值小于127的为0,大于127的为255。这样设置计算量小,计算快。缺点也严重:在不同的图像中,颜色分布差别大,处理效果也不会很好。
   程序开始之前设置R,G,B的阈值,通过阈值判断将像素设置为全黑(0x0000)或者全白(0xFFFF).同时根据色彩的变化记录每一行的颜色跳变点,由此识别出车牌区域。
   2、取平均值
      像素点平均值 = (像素点1灰度值 + 像素点2灰度值 + …… + 像素点n灰度值) / n
   3、双峰法
      此方法适用于具有明显双峰直方图的图像,不适合直方图中双峰差别很大或双峰间的谷比较宽广而平坦的图像。该方法认为图像由前景和背景组成,在灰度直方图上,前景和背景会形成高峰,在双峰之间的最低谷处就是阈值。

3.识别车牌区域:

   根据上一步的二值化,由于车牌区域跳变点多,由此可以得出车牌区域。分别记录车牌区域的上下高度。然后通过RGB-HSV颜色转换,识别出车牌区域的左右边界。

4.字符分割:

   我国常见车牌以及排列顺序大部分都是按照如下设计的:汉字、英文字母、点、英文字母、阿拉伯数字、阿拉伯数字、阿拉伯数字、阿拉伯数字。基于这个规律,以及图像采集高度一致,设计了如下的分割方法:
   1、在内存中开辟七个长为车牌长的七分之一和宽为车牌宽的区域
   2、从车牌图像长边的巾问向下开始扫描车牌图像,并把扫描到的所有的点灰度值复制到0区域的第四个区域对应位置上。然后再从上向下扫描刚扫描过这一努的左边或右边,直到所扫描的这一峰上的所有点的灰度都是0时为止,并把这一竖认为是字符的分离处。
   3、切割第五到第七个字符。方法就是,切割完了第四个字符之后,再依次扫描剩下的空间,直到所扫描的这一竖上的所有点的灰度值不全为0时,认为是字符的开始并依次扫描直到所扫描的这一竖上的所有点的灰度值全为0时认为是字符的结束。
   4、切割第三到第四个字符。这两个字符的切割方式与第五到第七个字符一样。
   5、切割第一到第二个字符。当第三个字符切割完之后,我们将遇到一个点,我们也把它看作一个字符,只不过这个点扫描之后就不要了。扫描完这个点之后,我们来切割第二个字符,它的切割方式与前面一样。切割完了第二个字符之后,再向左扫描,直到所扫描的这一竖上的所有点的灰度值不全为0时,认为是字符的开始,并依次扫描直到所扫描所有剩下的,并填到相应的位置,直到剩下的空间填满。经过粗分割后,可以得到一些单个字符区域和多余的空间。下一步我们将把这些多余的空间去掉。这将更有利于下一步字符的识别。
   去除图像上多余空间:
   车牌上的字符经过了粗切割所得到的是一些单的字符,但在分配空间时是按照车牌的宽和长的七分之一来分配的;所以这个空间可能大于字符应该占的空问。所以,要将多余空间去除。对于第一个字符从第一行开始向下扫描,把那些一行中所有的点的灰度值全为0的点去掉,直到扫描到有一行不全为0时为止。然后再从第一列开始向右扫描把那些一列中所有的点的灰度值全为0的点去掉,直到扫描到有一列不全为0时为止。接下来从最后一行开始向上扫描,把那些一行中所有的点的灰度值全为0的点去掉,直到扫描到有一行不全为0时为止。最后从最后一列开始向左扫描把那些一列中所有的点的灰度值全为0的点去掉,直到扫描到有一列不全为0时为止。重复上面的步骤完成剩下字符的切割
   根据二值化的结果,以及记录的跳变点位置,对字符进行分割,同时记录字符的左右边界。

5.字符匹配:

   对分割出来的字符进行归一化处理,这里用到图片的扩大算法,扩大之后逐一的去进行字符匹配。字符模板事前通过字模软件转换成二进制数据保存在数组中。最后根据匹配结果相似度最大的做为输出结果。
   归一化图像就是要把原来各不相同的字符统一到同一尺寸。因为扫描进来的图像中字符大小存在较大的差异,而相对来说,统一尺寸的字符识别的标准性更强,准确率自然也更高。具体算法如下:先得到原来字符的高度和宽度,与系统已存字模的数据作比较,得出要变换的系数,然后根据得到的系数按照插值的方法映射到原图像中。

实物图

视频演示

基于STM32单片机的车牌识别系统设计_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com

原文阅读(原文文末获取资料)

基于stm32的车牌识别设计​mp.weixin.qq.com免费分享海量学习资源​mp.weixin.qq.com

stm32车牌识别_基于STM32单片机的车牌识别相关推荐

  1. delphi 数字识别_基于STM32单片机的车牌识别

    系统介绍    使用STM32F103RCT6作为主控,摄像头使用OV7670(带FIFO).STM32进行了16倍频.识别过程分别为:图像采集,二值化,识别车牌区域,字符分割,字符匹配. 识别过程分 ...

  2. stm32捕获占空比_基于STM32超声波避障小车

    不管是对于初学者还是对于一个玩过单片机的电子爱好者来说,或多或少都接触到过小车项目,今天给大家介绍的的一个项目基于STM32超声波避障小车.这也是我曾经的一个课设,在此开源分享给大家,全文5000多字 ...

  3. stm32超声波扫频_基于STM32的超声波发生器扫频信号源的实现

    基于 STM32 的超声波发生器扫频信号源的实现 张加岭,李善波,侯颖钊,赵 杰 [摘 要] 摘要:扫频信号源采用以 STM32F103 单片机为核心,实现高精度锯 齿波扫频.由于超声波电源换能器串联 ...

  4. stm32超声波扫频_基于STM32的脉冲式及扫频式超声波除垢信号源设计

    基于 STM32 的脉冲式及扫频式超声波除垢信号源设计 李连通 , 张伟光 *, 李金博 [摘 要] [摘 要] 介绍了一种基于 STM32 主控芯片产生两种不同信号源的实 现 ] 脉冲信号源可以产生 ...

  5. stm32采集脉冲信号_基于STM32+FPGA的数据采集系统的设计与实现

    引言 由于火控系统工作环境特殊,所需采集信号复杂多样,传统的以微控制器或PC为主的采集系统往往难以胜任.针对上述问题,提出了一种基于STM32+FPGA的数据采集系统的设计方案,该方案不仅能够完成对多 ...

  6. stm32万年历流程图_基于STM32的电子万年历系统设计

    龙源期刊网 http://www.qikan.com.cn 基于 STM32 的电子万年历系统设计 作者:刘磊 来源:<科技资讯> 2015 年第 01 期 摘 要:电子万年历是集时间.日 ...

  7. h5调用指纹识别_基于HTML Canvas实现“指纹识别”技术,canvas指纹

    基于HTML Canvas实现"指纹识别"技术,canvas指纹 作者:zhanhailiang 日期:2015-01-31 说明 所谓指纹识别是指为每个设备标识唯一标识符(以下简 ...

  8. 电容屏物体识别_基于电容屏的物体识别技术简介

    原标题:基于电容屏的物体识别技术简介 物体识别技术概述 物体识别是基于触控屏的标签识别交互系统,由触控屏和实物标签Marker,软件底层识别程序和软件上层效果程序,支持多个Marker同时显示,将Ma ...

  9. stm32的语音识别_基于stm32循迹避障语音控制金属探测蓝牙小车设计(原理图+pcb+源码+参考文档)...

    功能描述及设计原理: 小车具有检测里程功能,在金属探测模式,槽型光耦会检测小车车轮的圈数,以此来计算小车行走的里程,并可以通过OLED屏幕显示出来.还可以显示小车的工作模式以及小车距离前方障碍物的距离 ...

最新文章

  1. 【转】ubuntu,你改变了我的人生
  2. Struts2自定义标签(template)——示例
  3. 虚拟Python环境可以这样创建
  4. D-S证据理论基本概念
  5. Backbone入门教程
  6. C++ intptr_t类型
  7. c++编写COM组件,并使用该组件
  8. html5 电子白板 直播,基于HTML5的电子白板的设计与实现
  9. IP地址子网划分基础知识
  10. 计蒜客 联想专卖店大促销
  11. 'utf-8' codec can't decode byte 0xb5 in position : invalid start byte
  12. 未来计算机专业会怎么样
  13. Java:MouseListener、MouseMotionListener监听器与MouseEvent事件
  14. 几款好用的微信开发ui库
  15. ModuleNotFoundError: No module named gensim.corpora
  16. 为什么那么多的企业选择上云,上云有哪些优势?
  17. Netty 工作流程图梳理
  18. 【JS】javascript正则表达式的基本使用(JavaScript RegExp 对象)
  19. 对账与清分、清算、结算
  20. 联想,想说爱你不容易

热门文章

  1. linux执行class文件_深入理解linux内核——可执行文件执行过程(2)
  2. php xmlreader 读xml,PHP中使用xmlreader读取xml数据示例
  3. 数据结构算法 二进制转十进制_数据结构 - 栈
  4. 再刷世界纪录!3051架无人机「同时飞行」演绎震撼灯光秀
  5. java中的分层概念_Java分层概念
  6. 华为鸿蒙os生态,华为鸿蒙系统终于来了! 首款方舟编译器应用正式上架: 鸿蒙OS可用...
  7. java函数ao活动对象_Java程序设计10-11试卷A0105答案
  8. 语言怎么绘画人物肖像_国画里的新年,看看古人是怎么过年的!
  9. matlab 电路频率响应_学习电子电路有什么仿真软件?有哪些优缺点?
  10. 图床失效了?也许你应该试试这个工具