Python OpenCv 车牌检测识别

背景

车牌识别在交通、停车等方面有着广泛应用,在网上也有很多种基于OpenCV方案进行识别,本文是综合了两种比较流行的方案,首先是提取出疑似车牌区域的轮廓,然后再基于色彩空间进行二次判断,比之前的方案有精度更高,泛化能力更强。

最终效果

详细过程

  1. 将正常图像等比例压缩并且转化为灰度图像,便于处理以后处理
 img = cv2.imread('car2.jpeg')initial_car = cv2.resize(img, (400, int(400 * img.shape[0] / img.shape[1])))gray_car = cv2.cvtColor(initial_car, cv2.COLOR_BGR2GRAY)
  1. 高斯模糊,消除噪点,便于边缘提取。卷积核所选取的越大,模糊效果越明显,但是也有可能造成重要边缘信息的丢失,应该根据实际情况去调整。
blur_car = cv2.GaussianBlur(gray_car, (7, 7), 0)
  1. 使用cv2.Canny() 进行边缘检测 此效果强于OpenCV中的Sobel边缘检测。cv2.Canny()返回的一幅二值化的图像,可以直接用cv2.findContours()进行轮廓提取。
canny_car = cv2.Canny(blur_car, 70, 120)


4. 各种形态学操作,主要是让车牌的轮廓更加明显,消除无用的噪点。此处卷积核的选择使用横向卷积核(3,13)3行13列。因为车牌也是一个横向的长方形,这样效果更好。可根据具体情况适当增加开 闭操作的次数。

def morphological_operation(img):kernel = np.ones((3, 13), np.uint8)closing_img = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)opening_img = cv2.morphologyEx(closing_img, cv2.MORPH_OPEN, kernel)kernel_2 = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))dilated_car = cv2.dilate(opening_img, kernel_2)return dilated_car


5. 提取轮廓,并且cv2.minAreaRect() 获得包裹轮廓的最小矩形,对这个矩形的长宽比进行判断,看其是否符合车牌特征。

# 对minAreaRect获得的最小外接矩形,用长宽比进行判断
def verify_sizes(rect):error = 0.3aspect = 3.143  # 定义的车牌长宽比 数据来源百度百科==>车牌rmin = aspect - aspect * errorrmax = aspect + aspect * errorheight, width = rect[1]if height == 0 or width == 0:return Falser = width/heightif r < 1:r = height/widthif r < rmin or r > rmax:return Falseelse:return True
  1. 根据色彩空间进行第二次判断,识别提高精度。
# 根据色彩空间进行二次筛选,图像均值最大的为结果
def verify_color(all_contour):dist_mean = 0t = 0for contour in all_contour:t=t+1x,y,w,h = cv2.boundingRect(contour)# 获取矩形框里面的像素res = initial_car[y:y+h,x:x+w,:]hsv = cv2.cvtColor(res, cv2.COLOR_BGR2HSV)# 蓝色车牌范围lower = np.array([100, 43, 46])upper = np.array([124, 255, 255])# 色彩空间提取,在蓝色范围内为255,不在为0.dist = cv2.inRange(hsv, lower, upper)# 计算均值,输出最大值mean = cv2.mean(dist)if mean[0]>dist_mean:dist_mean = mean[0]dist_img = resreturn dist_img
  1. 效果展示

Python OpenCv 车牌检测识别(边缘检测、HSV色彩空间判断)相关推荐

  1. 毕设 深度学习 python opencv 火焰检测识别 火灾检测

    文章目录 0 前言 1 基于YOLO的火焰检测与识别 2 课题背景 3 卷积神经网络 3.1 卷积层 3.2 池化层 3.3 激活函数: 3.4 全连接层 3.5 使用tensorflow中keras ...

  2. 六种车牌检测识别算法GitHub项目调研对比

    文章目录 前言 一.EasyOCR 1.1 仓库介绍 1.2 使用记录 二.HyperLPR 2.1 HyperLPR 概述 2.2使用记录 2.3 使用建议 三.simple-car-plate-r ...

  3. Python OpenCV车道线识别侦测

    Python OpenCV车道线识别侦测 如需安装运行环境或远程调试,可加QQ905733049, 或QQ2945218359由专业技术人员远程协助! 运行结果如下: 代码如下: import cv2 ...

  4. 2021-01-07 Python Opencv转换颜色空间 RGB转为HSV

    Python Opencv转换颜色空间 RGB转为HSV 举个例子,通过摄像头把视频中的蓝色区域凸显出来,剩余的颜色均为黑色 import numpy as npcap = cv2.VideoCapt ...

  5. 【项目三、车牌检测+识别项目】四、使用LPRNet进行车牌识别

    目录 前言 一.数据集 二.训练 三.验证 四.测试结果 五.推理代码 Reference 前言 马上要找工作了,想总结下自己做过的几个小项目. 之前已经总结过了我做的第一个项目:xxx病虫害检测项目 ...

  6. Python opencv进行矩形识别

    Python opencv进行矩形识别 图像识别中,圆形和矩形识别是最常用的两种,上一篇讲解了圆形识别,本例讲解矩形识别,最后的结果是可以识别出圆心,4个顶点,如下图: 左边是原始图像,右边是识别结果 ...

  7. JavaCV进阶opencv图像检测识别:摄像头图像人脸检测

    JavaCV免费教程目录: JavaCV入门教程(免费JavaCV教程) javacv实战专栏目录(2016年更新至今): JavaCV实战专栏文章目录(2016年更新至今) 2022年最新JavaC ...

  8. JavaCV进阶opencv图像检测识别:ffmpeg视频图像画面人脸检测

    JavaCV免费教程目录: JavaCV入门教程(免费JavaCV教程) javacv实战专栏目录(2016年更新至今): JavaCV实战专栏文章目录(2016年更新至今) 2022年最新JavaC ...

  9. 【项目三、车牌检测+识别项目】一、CCPD车牌数据集转为YOLOv5格式和LPRNet格式

    目录 前言 一.CCPD数据集介绍 二.CCPD数据集下载 三.划分训练集.验证集和测试集 四.车牌检测数据集制作 五.车牌识别数据集制作 六.我的车牌检测+识别数据集 Reference 前言 马上 ...

最新文章

  1. 软件测试系列之四 单元测试(Junit)
  2. 如何在vue中使用图形验证码
  3. 微服务网关Ocelot
  4. 阿里3篇技术论文入选国际顶级会议FAST2020,全球第一!
  5. ASP.NET 5 Beta8 已经发布
  6. 【Hbase】HBase 更改表名
  7. Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your My
  8. python数据库操作——NoSQL数据库之连接MongoDB、Redis数据库
  9. etree解析xml_在python中使用Etree解析XML配置文件
  10. 论文阅读:FVQA: Fact-based Visual Question Answering
  11. bing搜索php,必应bing网页搜索小偷php程序 v1.0PHP小偷采集源码下载-华软网
  12. 一群参与境内外赌博网站的开发的程序员被抓,网友:切勿面向监狱编程。。。...
  13. upload组件代码执行成功却还是有报错提醒
  14. 什么是登陆器劫持登陆器劫持怎么办GOM引擎的登陆器会被劫持吗
  15. 如何备份MySQL数据库
  16. 谈谈wxHOOK为什么会限制
  17. git fatal: unable to access  Failed to connect to localhost port 1080: Connection refused
  18. 借记/贷记交易处理流程
  19. 帮助文档—C4D反射通道
  20. win10 环境变量及其作用大全

热门文章

  1. 华为荣耀笔记本linux系统怎么样,荣耀笔记本和华为笔记本有什么区别
  2. java验证字符是否为字母_Java程序检查字符是否为字母
  3. html游动文字如何设置颜色,pr游动字幕怎么做
  4. HTML(Basic) Chapter4(Pink) 综合案例小米商城产品模块
  5. eclipse安装STS支持注意的坑
  6. 【板绘素材】漫画眼睛超超详细上色步骤~
  7. 加js库和css库| jQuery hover()用法 |document.onreadystatechange |get和post
  8. 三个常见博弈游戏以及 SG 函数和 SG 定理
  9. 编译android源码刷机到Nexus5x
  10. 周鸿祎:互联网成功十大案例