OpenCV-车牌号检测

在github上看到一个小项目觉得挺有意思:借助传统图像处理技巧,通过opencv进行车牌号位置检测。虽然我实际测试后效果不太好,但也能学到另一种处理思路。

原作者链接:https://github.com/Aqsa-K/Car-Number-Plate-Detection-OpenCV-Python

文章目录

  • OpenCV-车牌号检测
  • 一、传统图像处理方法
  • 二、效果
  • 三、深入思考
  • 四、源码
  • 五、项目链接

一、传统图像处理方法

输入一张原始图片,要求检测出车牌号位置。

第1步:对图像进行resize、灰度处理、双边滤波降噪,得到一张更加干净的图片。
第2步:利用cv2.Canny函数做边缘检测,检测出图片中主要物体的边缘信息。
第3步:利用cv2.findContours函数查找物体的轮廓,分别归到不同的类别。相当于利用物体的轮廓信息,对图片中不同的物体做了聚类处理。
第4步:对不同的聚类结果,利用cv2.approxPolyDP函数分别进行曲线拟合。
第5步:针对每次拟合的结果,添加if语句进行车牌号判别。

二、效果

原始输入图片,并进行resize:

进行灰度处理:


通过双边滤波降噪,得到一张更加干净的图片:


利用cv2.Canny函数做边缘检测:


利用cv2.findContours函数查找物体的轮廓,根据边缘检测结果分类可得到263个区域。我们对其中合适大小的区域进行cv2.approxPolyDP曲线拟合,如果拟合出的形状接近长方形,且长宽比例合适,我们就认为它是车牌号位置区域。

三、深入思考

说实话,这个项目实际场景的应用效果并不好。我从网上随意找了10张图片进行测试,大概只有1-2张图片能准确检测出车牌号位置。


因为算法主要依靠边缘特征进行处理,因此它在车牌号的边缘非常明显的情况下检测效果不错,例如这种车辆的图片:



从项目效果可以看出,相比于无监督学习,有监督学习的算法效果往往能好很多。突然发现,在计算机专业学习时,自己接触到的大部分图像处理算法,都是借助无监督的思路来设计的;而在数学专业学习时,自己接触到的大部分图像处理算法,却都是借助有监督的思路来设计的。

四、源码

代码如下:

import numpy as np
import cv2
import imutils# Read the image file
image = cv2.imread('0.jpg')
# (423, 640, 3)# Resize the image - change width to 500
image = imutils.resize(image, width=500)
# (330, 500, 3)
cv2.namedWindow("image")
cv2.imshow("image", image)
cv2.waitKey(0)# RGB to Gray scale conversion
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# (330, 500)
cv2.namedWindow("Grayscale Conversion")
cv2.imshow("Grayscale Conversion", gray)
cv2.waitKey(0)# Noise removal with iterative bilateral filter(removes noise while preserving edges)
gray = cv2.bilateralFilter(gray, 11, 17, 17)
cv2.namedWindow("Bilateral Filter")
cv2.imshow("Bilateral Filter", gray)
cv2.waitKey(0)# Find Edges of the grayscale image
edged = cv2.Canny(gray, 170, 200)
# (330, 500)
cv2.namedWindow("Canny Edges")
cv2.imshow("Canny Edges", edged)
cv2.waitKey(0)# Find contours based on Edges
(cnt, _) = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
# sort contours based on their area keeping minimum required area
# as '30' (anything smaller than this will not be considered)
cnt = sorted(cnt, key=cv2.contourArea, reverse=True)[:30]# we currently have no Number plate contour
NumberPlateCnt = None# loop over our contours to find the best possible approximate contour of number plate
for c in cnt:peri = cv2.arcLength(c, True)approx = cv2.approxPolyDP(c, 0.01 * peri, True)if len(approx) == 4:approx = approx[:, 0, :]x1 = np.min(approx[:, 0])y1 = np.min(approx[:, 1])x2 = np.max(approx[:, 0])y2 = np.max(approx[:, 1])w = x2 - x1h = y2 - y1ratio = w/hif 3 < ratio < 6:NumberPlateCnt = approxprint(x1, y1, x2, y2, ratio)cv2.drawContours(image, [NumberPlateCnt], -1, (0, 255, 0), 3)# Drawing the selected contour on the original image
cv2.namedWindow("Final Image")
cv2.imshow("Final Image", image)
cv2.waitKey(0)

五、项目链接

如果代码跑不通,可以去下载项目链接:https://blog.csdn.net/Twilight737

OpenCV-车牌号检测相关推荐

  1. Python中利用Opencv进行车牌号检测

    初学Python.Opencv,想用它做个实例解决车牌号检测. 车牌号检测需要分为四个部分:1.车辆图像获取.2.车牌定位.3.车牌字符分割和4.车牌字符识别 在百度查到了车牌识别部分车牌定位和车牌字 ...

  2. opencv实现车牌识别之车牌号定位_1

    转载文章:http://blog.csdn.net/u011630458/article/details/43604689 简介 按照在哪里跌倒就在哪里爬起来的精神,本章继续做车牌号的检测识别.所有步 ...

  3. 智能停车场(可检测车牌通过oled屏幕显示车牌号)语音+LED灯提示该车辆所停车位

    今天通过自己的学习,我做了一个智能停车场,首先先来介绍一下他的功能,通过识别车辆的车牌号并在OLED屏幕上显示车牌号,然后升降杆升起,并通过语音播报提示车辆所去的车位,同时会有绿色指示灯提示该车位位置 ...

  4. 基于Opencv的车距检测系统(源码&教程)

    1.研究背景 对本车前方车辆的识别及距离检测是计算机视觉技术在智能网联汽车中的一个重要内容.要想在错综繁杂的交通环境中实现无人驾驶,对行车环境中其他车辆信息的获取是十分重要的.因此,对本车前方车辆的识 ...

  5. Python 基于 opencv 的车牌识别系统, 可以准确识别车牌号

    大家好,我是程序员徐师兄,6 年大厂程序员经验,点击关注我 简介 毕业设计基于Opencv的车牌识别系统 车牌搜索识别找出某个车牌号 对比识别车牌系统 车牌数据库认证系统 车牌图文搜索系统 车牌数据库 ...

  6. 用tf-faster-rcnn训练自己制作的车牌号数据集(VOC2007格式)

    参考链接:http://ai.baidu.com/forum/topic/show/595975 https://github.com/endernewton/tf-faster-rcnn https ...

  7. 2如何识别操作系统_扫描车牌识别车牌号的功能sdk

    扫描车牌识别车牌号的功能sdk OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形 ...

  8. matlab提取车牌字符程序,matlab - 如何使用Matlab提取和识别车牌号?

    我想开发一个用模板匹配法提取和识别车牌号的matlab程序. 这是我的代码:function letters = PengenalanPlatMobil(citra) %load NewTemplat ...

  9. python+pyhyper实现识别图片中的车牌号

    背景 最近领导给布置了一个基于图片识别车牌号的工具开发任务,然后就去研究实现逻辑,自己根据opencv写了一个小demo,发现不仅速度慢而且成功率极低.然后,就找到了Hyperlpr开源项目. 环境搭 ...

  10. 正则——国内车牌号 挂学警港澳使领 蓝牌 绿牌

    const reg = /^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4 ...

最新文章

  1. 可在广域网部署运行的QQ高仿版 -- GG叽叽(开源)
  2. 邮件附件在线预览——HTML Filter
  3. golang中的strings.Compare
  4. postman请求soap 请求_postman中请求如何传递对象到spring controller?
  5. 使用pip来安装pyOpenSSL
  6. Python程序开发——第八章 文件
  7. OpenSSL--Window生成证书实战
  8. SpringBoot 集成 Nacos
  9. WPF 媒体播放器(MediaElement)使用实例(转)
  10. android本页切换子页,android ViewPager控件实现手势滑动切换页签-Fun言
  11. 职称计算机xp系统试题,2020年职称计算机WindowsXP测试题及答案.doc
  12. 把一个下拉框中的选项添加到另一个中
  13. 团队开发之个人博客一
  14. Oracle基本知识点总结
  15. Oracle 实体用户授权及同步同义词
  16. 路由器与交换机的区别?
  17. 经典SQL查询语句大全
  18. AhMyth远程控制手机实验
  19. windows.old是什么文件,如何删除
  20. 计算机二级的简单项目,2016年计算机二级考试VB简单综合应用题冲刺

热门文章

  1. Image zImage vmlinuz
  2. 精益创业实战 - 第3章 制作自己的精益画布
  3. linux教学之安装python与pip环境
  4. php工作流如何实现,工作流设计参考(包括PHP实现)
  5. 番茄助手Visual Assistx报错The security key for this program currently。。
  6. python pywinauto 自动控制微信, 关键字回复、收款、定时任务, 代替人工成为微信客服
  7. InnoDB存储引擎体系架构
  8. 超级硬盘数据恢复软件 4.6.5.0注冊码破解版
  9. Delphi 11.1 Alexandria 下载地址集合(包括以前版本)
  10. VS出现error LNK2005,error C4430,error C2011