基于opencv-python的车牌识别

基于Python_opencv的车牌识别系统 本项目是基于python_opencv的车牌识别系统,文档中可下载完整代码,希望大家多多支持,也欢迎大家多提意见,一起学习!!!!! 阅读详情

2020-04-04 13:56 更新

修复程序识别时大部分图片报错RGB转HSV失败的问题

  • 修改内容:Recognition.py 模块内颜色定位部分的一个异常处理里的逻辑bug
  • 相关代码已在GitHub上更新
  • 修改内容用已在下面给出
try:
    card_img_hsv = cv2.cvtColor(card_img, cv2.COLOR_BGR2HSV)
except:
    card_img_hsv = None

  1. 基于opencv-python的车牌识别,代码主要参考优快云上几篇博主的代码,对预处理部分的代码进行了一定的优化,提高了识别的准确率。
  2. 重写了一个GUI界面,添加数据导出功能。
  3. 添加API接口。
  4. Github工程已适配高版本OpenCV( 4.2.0)
  • 使用的模块版本:
    PyQt5:5.11.3
    opencv-python:3.4.3
  • 完整工程:
    GitHub:车牌识别
    Gitee :车牌识别
    优快云 :车牌识别
    推荐下载GitHub上的工程,优快云上上传的比较老了。

先放一张运行截图:
在这里插入图片描述

基本实现流程:

  1. 读取图像
    使用cv2.imdecode()函数将图片文件转换成流数据,赋值到内存缓存中,便于后续图像操作。使用cv2.resize()函数对读取的图像进行缩放,以免图像过大导致识别耗时过长。

  2. 降噪
    使用cv2.GaussianBlur()进行高斯去噪。使用cv2.morphologyEx()函数进行开运算,再使用cv2.addWeighted()函数将运算结果与原图像做一次融合,从而去掉孤立的小点,毛刺等噪声。

# 高斯去噪  
if blur > 0:  
    img = cv2.GaussianBlur(img, (blur, blur), 0)  
oldimg = img  
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  
# cv2.imshow('GaussianBlur', img)  
kernel = np.ones((20, 20), np.uint8)  
img_opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)  # 开运算  
img_opening = cv2.addWeighted(img, 1, img_opening, -1, 0);  # 与上一次开运算结果融合  
# cv2.imshow('img_opening', img_opening)  

在这里插入图片描述
在这里插入图片描述
3. 二值化
使用cv2.threshold()函数进行二值化处理,再使用cv2.Canny()函数找到各区域边缘。

ret, img_thresh = cv2.threshold(img_opening, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)  # 二值化  
img_edge = cv2.Canny(img_thresh, 100, 200)  
# cv2.imshow('img_edge', img_edge)  

在这里插入图片描述

  1. 将图像边缘连接为一个整体
    使用cv2.morphologyEx()和cv2.morphologyEx()两个函数分别进行一次开运算(先腐蚀运算,再膨胀运算)和一个闭运算(先膨胀运算,再腐蚀运算),去掉较小区域,同时填平小孔,弥合小裂缝。将车牌位置凸显出来。

    kernel = np.ones((self.cfg["morphologyr"], self.cfg["morphologyc"]), np.uint8)  
    img_edge1 = cv2.morphologyEx(img_edge, cv2.MORPH_CLOSE, kernel)  # 闭运算  
    img_edge2 = cv2.morphologyEx(img_edge1, cv2.MORPH_OPEN, kernel)  # 开运算  
    # cv2.imshow('img_edge2', img_edge2)  
    

    在这里插入图片描述

  2. 查找车牌(矩形区域)
    查找图像边缘整体形成的矩形区域,可能有很多,车牌就在其中一个矩形区域中,逐个排除不是车牌的矩形区域。车牌形成的矩形区域长宽比在2到5.5之间,因此使用cv2.minAreaRect()函数框选矩形区域计算长宽比,长宽比在2到5.5之间的可能是车牌,其余的矩形排除。最后使用cv2.drawContours()函数将可能是车牌的区域在原图中框选出来。(此处处理结果可能得到多个符合要求的矩形,而未必直接得到车牌位置,因此还需后续处理。)在这里插入图片描述

  3. 图形修正
    矩形区域可能是倾斜的矩形,需要矫正,以便使用颜色定位,从而进一步确认是否是车牌。类似下两图(仅列举出两个,可能有很多)。
    在这里插入图片描述 在这里插入图片描述

  4. 颜色识别
    使用颜色定位,排除不是车牌的矩形,目前只识别车牌的颜色主要为蓝、绿、黄三种颜色车牌。根据矩形的颜色不同从而选出最可能是车牌的矩形。同时匹配出车牌的类型(颜色类型)。使用参数为*cv2.COLOR_BGR2HSV*的cv2.cvtColor()函数将原始的RGB图像转换成HSV图像,以便定位颜色。
    基于HSV颜色模型可知色调H的取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;查阅相关资料确定出下表:

    黄色绿色蓝色
    H14-3434-9999-124

    根据上表计算出每个矩形中各颜色的占有量,比较每个矩形三个颜色的占有量,即可确定最可能是车牌的矩形以及车牌颜色。
    在这里插入图片描述 在这里插入图片描述

  5. 车牌部分二值化
    利用参数为*cv2.COLOR_BGR2GRAY*的cv2.cvtColor()函数将定位到的车牌部分RGB图像转化为灰度图像,再利用cv2. threshold() 函数将灰度图像二值化。需要注意的是,黄、绿色车牌字符比背景暗、与蓝的车牌刚好相反,所以黄、绿车牌在二值化前需要利用cv2.bitwise_not( )函数取反向。

# 做一次锐化处理  
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)  # 锐化  
card_img = cv2.filter2D(card_img, -1, kernel=kernel)  
# cv2.imshow("custom_blur", card_img)  
  
# RGB转GARY  
gray_img = cv2.cvtColor(card_img, cv2.COLOR_BGR2GRAY)  
# cv2.imshow('gray_img', gray_img)  
  
# 黄、绿车牌字符比背景暗、与蓝车牌刚好相反,所以黄、绿车牌需要反向  
if color == "green" or color == "yellow":  
    gray_img = cv2.bitwise_not(gray_img)  
# 二值化  
ret, gray_img = cv2.threshold(gray_img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)  
# cv2.imshow('gray_img', gray_img)
  1. 字符分割(投影法)
    根据设定的阈值和图片直方图,找出波峰,利用找出的波峰,分隔图片。因为车牌中“ • ”也会产生一组波峰,因此将八组波峰中的第三组去除掉,即可得到每个字符的波峰,再根据每组波峰的宽度分割牌照图像得到每个字符的图像.
    在这里插入图片描述
    在这里插入图片描述

  2. 匹配模板
    将分割后的每个图像逐个与已训练好的模板进行匹配,得到识别结果。
    在这里插入图片描述

POST接口

# !/usr/bin/python
# -*- coding: utf-8 -*-

# @Time: 2020/2/6 下午12:13
# @Author: Casually
# @File: Server.py
# @Email: fjkl@vip.qq.com
# @Software: PyCharm

from _collections import OrderedDict
from flask import Flask, request, jsonify
from json_utils import jsonify
import numpy as np
import cv2
import time
from collections import OrderedDict
from Recognition import PlateRecognition

# 实例化
app = Flask(__name__)
PR = PlateRecognition()

# 设置编码-否则返回数据中文时候-乱码
app.config['JSON_AS_ASCII'] = False


# route()方法用于设定路由;类似spring路由配置
@app.route('/', methods=['POST'])  # 在线识别
def forecast():
    # 获取输入数据
    stat = time.time()
    file = request.files['image']
    img_bytes = file.read()
    image = np.asarray(bytearray(img_bytes), dtype="uint8")
    image = cv2.imdecode(image, cv2.IMREAD_COLOR)
    RES = PR.VLPR(image)
    if RES is not None:
        result = OrderedDict(
            Error=0,
            Errmsg='success',
            InputTime=RES['InputTime'],
            UseTime='{:.2f}'.format(time.time() - stat),  # RES['UseTime'],
            Number=RES['Number'],
            From=RES['From'],
            Type=RES['Type'],
            List=RES['List'])
    else:
        result = OrderedDict(
            Error=1,
            Errmsg='unsuccess')
    return jsonify(result)


if __name__ == '__main__':
    app.run()
车牌识别 opencv python(简单版) 车牌识别 阅读详情

相关推荐

基于python+OpenCV的车牌号码识别

基于python+OpenCV的车牌号码识别 车牌识别行业已具备一定的市场规模,在电子警察、公路卡口、停车场、商业管理、汽修服务等领域已取得了部分应用。一个典型的车辆牌照识别系统一般包括以下4个部分:车辆图像获取、车牌定位、车牌字符分割和车牌字符识别 1、车牌定位的主要工作是从获取的车辆图像中找到汽车牌照所在位置,并把车牌从该区域中准确地分割出来 这里所采用的使利用车牌的颜色(黄色、蓝色、绿色) ...

PYH1009的博客 1万+

【Python实战】——Python+Opencv是实现车牌自动识别

该篇文章将以实战形式演示利用Python结合Opencv实现车牌识别,全程涉及图像预处理、车牌定位、车牌分割、通过模板匹配识别结果输出。该项目对于智能交通、车辆管理等领域具有实际应用价值。通过自动识别车牌号码,可以实现车辆追踪、违章查询、停车场管理等功能,提高交通管理的效率和准确性。可用于车牌识别技术学习。

jd1813346972的博客 6万+

python基础教程:python+OpenCV实现车牌号码识别

这篇文章主要介绍了python+OpenCV实现车牌号码识别,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 基于python+OpenCV的车牌号码识别,供大家参考,具体内容如下 车牌识别行业已具备一定的市场规模,在电子警察、公路卡口、停车场、商业管理、汽修服务等领域已取得了部分应用。一个典型的车辆牌照识别系统一般包括以下4个部分:车辆图像获取、车牌定位、车牌字符分...

python基础编程开发教程 1万+

检测和识别车牌的python的简单示例代码

瞎几巴乱写

weixin_45331480的博客 2353

python+opencv+TESSERT-OCR实现车牌的检测与识别

python+opencv+TESSERT-OCR实现车牌的检测与识别 开学花了十天时间0基础搞出来的,分享给大家,如果有什么错误希望大家给我指正。python师从小甲鱼,opencv师从贾志刚,B站都有视频。话不多说,先上运行结果。 当然,这只是一个简易的识别或者说算不上一个车牌识别的系统,因为你可能换一张图片它就识别不出来,但是其中对图像处理的方法还是有通用性的。 1.配置环境 我们需要用到的包如下 import cv2 as cv import numpy as np import pytesser

qq_37107756的博客 6751

【Python】 Python + OpenCV 实现车牌自动识别

车牌自动识别(Automatic License Plate Recognition, ALPR)或称车牌识别(License Plate Recognition, LPR)系统在智能交通、停车场管理、安防监控等领域有着广泛的应用。其核心任务是从图像或视频中自动检测、定位车牌,并识别出车牌上的字符信息。本系列将详细介绍如何使用Python和OpenCV库来实现一个基本的车牌识别系统。1 导入相关模块在开始项目之前,我们需要导入一些必要的Python库。这些库将为我们提供图像处理、数值计算和图像显示等功能。

宅男很神经 1265

基于Python-opencv的车牌识别系统

1.基于opencv-python的车牌识别,代码主要参考优快云上几篇博主的代码,对预处理部分的代码进行了一定的优化,提高了识别的准确率。 2.重写了一个GUI界面,添加数据导出功能。 使用的模块版本: PyQt5:5.11.3 opencv-python:3.4.3 运行截图如下: 代码实现步骤: 1.导入工程包 import cv2 import sys, os, xlwt import numpy as np 2.建立GUI界面,实现将图片导入,和到处识别数据 class U

阿凯的博客 1万+

蓝色车牌识别OpenCV-Python

车牌识别前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import p

R_Rui_Moon的博客 1733

OpenCV+Python识别车牌和字符分割

本篇文章主要基于python语言和OpenCV库(cv2)进行车牌区域识别和字符分割,开篇之前针对在python中安装opencv的环境这里不做介绍,可以自行安装配置! 车牌号检测需要大致分为四个部分: 1.车辆图像获取 2.车牌定位、 3.车牌字符分割 4.车牌字符识别 具体介绍 车牌定位需要用到的是图片二值化为黑白后进canny边缘检测后多次进行开运算与闭运算用于消除小块的区域,保留大块的...

小崔的博客 2万+

【OpenCV实战】简洁易懂的车牌号识别Python+OpenCV实现“超详解”(含代码)

简洁易懂的车牌号识别Python实现(含代码)1、整体思路2、代码详解 1、整体思路 2、代码详解

qq_40784418的博客 9万+

Python+OpenCV实现车牌检测与识别

使用Python+OpenCv实现车牌检测与识别,算法思想来自于网上资源,先使用图像边缘和车牌颜色定位车牌,再识别字符。车牌定位在预测方法中,为说明清楚,完成代码和测试后,加了很多注释,请参看源码。车牌字符识别也在预测方法中,请参看源码中的注释,需要说明的是,车牌字符识别使用的算法是OpenCv的SVM,OpenCv的SVM使用代码来自于OpenCv附带的样本。由于训练样本有限,你测试时会发现,车...

不脱发的程序猿 1万+

Python-OpenCV车牌识别系统

Python-OpenCV车牌识别系统-1 文章目录

weixin_46085748的博客 8420

python opencv实现车牌识别

aa = cv2.drawContours(value2, [box], -1, (0, 255, 0), 3) # 找出车牌的位置。ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) # 图像二值化。img_edge2 = cv2.morphologyEx(img_edge1, cv2.MORPH_OPEN, kernel1) # 开运算。1:对车牌进行HSV颜色空间转化,便于更好的进行颜色分隔和轮廓检测,找到蓝色车牌区域。

qinshi501的博客 1250

实现基于opencv的车牌识别算法【python】

基于opencv的图像处理,突破点在于对图片的灰度分析。

weixin_52763992的博客 1561

解锁 STP 与 SOLIDWORKS 转换密码:工具及迪威在线转换秘籍

STP 文件能够完整地记录 3D 模型的几何形状、尺寸、公差、材料属性等丰富信息,无论是简单的机械零件,还是复杂的装配体,都能精准呈现。而在线转换以迪威模型为例,凭借便捷性、高效性和安全性,为广大 3D 专业技术人员和学生党在无需安装额外软件的情况下,轻松实现格式转换提供了有力支持。在实际工作和学习中,可根据自身具体情况灵活选择合适的转换方式,以确保 3D 设计工作流程的顺畅进行,让创意在不同格式间自由流动并绽放光彩。在 3D 设计与建模的广袤世界里,不同格式文件间的转换常常是连接创意与实现的关键桥梁。

技术说明博主 3444

(一)ANSYS WORKBENCH实践入门

ANSYS-workbench 有限元分析应用基础教程 (张晔)学习笔记

qq_51767372的博客 1万+

python车牌识别_python+opencv实现车牌识别

文章目录:一、前言二、训练分类器2.1、准备训练用单字符图片2.2、图片预处理2.3、用opencv的preprocess_hog()处理图片2.4、用SVM训练分类器三、车牌定位四、字符分割五、字符识别六、Mysql保存七、总结八、参考资料一、 前言:最近一直在学习机器学习,花了段时间把《机器学习实战》(【美】Peter Harrington著)看了一遍,当中讲述的几个机器学习经典算法虽说有所掌...

weixin_39550172的博客 1471

QOpenGL入门教程(二)—— 第一个QOpenGLWidget程序

终于到了实际操作的环节了,这一章我们要做的是: 创建OpenGL窗口 创建并编写着色器程序 为着色器程序装配顶点数据 启动渲染管线进行绘图 第一步:创建新项目 首先,我们使用Qt创建一个常规的QWidget项目,建议不要勾选ui设计器(个人习惯,笔者不太习惯于使用ui来设计) 第二步:创建QOpenGLWidget并实现三个虚函数 QOpenGLWidget Qt5.4之前,Qt可以通过一个QGLWidget类来创建OpenGL窗口,但由于opengl的发展,在5.4版本的时候,Qt提供

ItaLink 1万+

python车牌识别系统 深度学习 车牌实时检测 OpenCV

技术栈:Python语言、OpenCV、HyperLPR中文车牌识别框架、pyqt5。

QQ80213251的博客 1947

从DIY到实战:手把手教你搭建一个媲美吉时利2450的nA级电流源表(附原理图与避坑指南)

本文详细解析如何从零打造nA级精密电流源,涵盖核心设计原理、PCB布局技巧、热电偶效应应对及校准验证体系。通过低成本替代方案和优化设计,实现媲美商用源表的性能,特别适合硬件爱好者和独立开发者。文章还提供原理图与避坑指南,助你轻松搭建高精度电流源系统。

weixin_42656416的博客 291

用Spirent Test Center测试交换机Head of Line(HOL)Blocking

测试目的:设备执行拥塞控制,使非阻塞端口不受阻塞端口影响 预设条件:在RFC2889里按以下步骤设置,端口1和端口3同时向端口4发送数据包,端口1向端口2发送数据包 测试步骤:运行设置好的RFC2889 测试结果:所有frame size都显示没有Head of Line(HOL),即非阻塞端口不受阻塞端口所影响 ...

Yuna_的博客 1357

python基于OpenCV的车牌识别系统

车牌识别系统是一种利用计算机视觉和深度学习技术来自动识别和提取车辆上的车牌信息的系统。以下是对基于OpenCV的Python车牌识别系统的详细介绍:一、技术栈Python:一种广泛使用的编程语言,因其易读性和丰富的库支持而受到欢迎。OpenCV:一个开源的计算机视觉库,提供了丰富的函数和工具来处理图像和视频。其他可能的技术:如HyperLPR(一个开源的中文车牌识别框架)和pyqt5(一个基于Python的GUI开发框架,用于创建用户界面)。开发语言:Python。

qq_1262330535的博客 1922

在 Windows 11 下运行 OminiParse V2,详细教程【含问题解决细节】

OmniParser V2 是微软推出的 GUI 智能体解析工具,可将屏幕截图转换为结构化元素,帮助 LLM 理解和操作界面。它在检测小图标和推理速度上显著提升,延迟降低 60%,并支持多种 LLM。

简简单单Onlinezuozuo 1090

Python基于OpenCV的车牌识别系统

摘要: 本文介绍了一个基于OpenCV的Python车牌识别系统,使用Python 3.7.3、OpenCV 4.0.0.21、NumPy 1.16.2等库开发。系统通过图像预处理、车牌定位、字符分割和OCR识别四个步骤实现车牌识别功能,并提供了图形用户界面支持图片和摄像头两种输入方式。实验表明系统能有效识别大部分车牌,但在复杂环境下仍需优化。文章详细阐述了系统设计思路、技术实现和功能模块,并提供了完整的Python代码框架。该系统可作为智能交通管理的基础应用,未来可通过算法改进提升识别准确率。

毕业作品网站 1992

【S32K3 MCAL配置】-3.4-CANFD配置-接收特定的“经典CAN/CANFD标准帧”和“经典CAN/CANFD扩展帧”(基于MCAL+FreeRTOS)

【S32K3 MCAL配置】-3.4-CANFD配置-接收特定的“经典CAN/CANFD标准帧”和“经典CAN/CANFD扩展帧”(基于MCAL+FreeRTOS)

「汽车电子助手」的博客 696

基于毫米波生物感知雷达+STM32设计的独居老人居家监护系统(微信小程序)(192)

当前基于STM32设计的独居老人居家监护系统为独居老人提供一种简便、实时的健康监护服务。该系统通过集成多种传感器和功能模块,能够实时监测老人的生理指标、姿态以及室内环境状况,并通过微信小程序远程显示数据,当出现异常情况时及时发出报警提醒。

1万+
下一篇: Windows下PyTorch环境配置及安装
评论 145
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值