opencv + svm实现车牌识别(附完整代码)

article/2025/9/11 18:41:58

一、实验目的

通过一张含有车牌的车的照片,分割出车牌并识别出图片上车的车牌号

二、具体内容

  1. 车牌定位
  2. 车牌字符分割
  3. 车牌字符识别

三、实验过程

1.车牌定位
具体过程:
1.灰度转换:将彩色图片转换为灰度图像,常见的R=G=B=像素平均值。
2.高斯平滑和中值滤波:去除噪声。
3.二值化处理:图像转换为黑白两色,通常像素大于127设置为255,小于设置为0。
4.canny边缘检测
5.膨胀和细化:放大图像轮廓,转换为一个个区域,这些区域内包含车牌。
6.通过算法选择合适的车牌位置,通常将较小的区域过滤掉或寻找蓝色底的区域。
7.标注车牌位置并提取车牌

读入原始图像
在这里插入图片描述

BGR转换为灰度图像
在这里插入图片描述

图像二值化处理

在这里插入图片描述

canny边缘检测
在这里插入图片描述

进行闭运算与开运算,消除小的区域,保留大块的区域,从而定位车牌位置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

找出轮廓的左上点和右下点,由此计算它的面积和长度比。找出面积最大的三个区域。
在这三个最大的区域中使用颜色识别判断找出最像车牌的区域。
目前支持识别三种颜色的车牌,遍历所有像素点根据每个点的HSV值的区间来判断颜色。
统计所有点的颜色值,根据统计的所有 黄色、蓝色、绿色点的数量来确定车牌的颜色
HSV 颜色空间范围:
在这里插入图片描述

颜色识别结果:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.车牌字符分割
由于图像中只有黑色和白色像素,因此可以通过图像的白色像素和黑色像素来分割开字符。即分别通过判断每一行每一列的黑色白色像素值的位置,来定位出字符。

在这里插入图片描述

分割结果:
转灰度
在这里插入图片描述

二值化

在这里插入图片描述

分割:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.车牌字符识别

在这里使用的是OpenCv自带的机器学习框架SVM模型
分别训练两个svm模型用于识别车牌中文省份简称和后面的字母和数字
opencv的svm框架使用:

model = cv2.ml.SVM_create()#生成一个SVM模型

model.setGamma(gamma) #设置Gamma参数,demo中是0.5

model.setC©# 设置惩罚项, 为:1

model.setKernel(cv2.ml.SVM_RBF)#设置核函数

model.setType(cv2.ml.SVM_C_SVC)#设置SVM的模型类型:SVC是分类模型,SVR是回归模型

model.train(samples, cv2.ml.ROW_SAMPLE, responses)#训练

model.predict(samples)#预测

model.load(filepath)#从文件载入训练好的模型

model.save(filepath)#保存训练好的模型到文件中

训练数据集:
SVM训练使用的训练样本来自于github
将训练数据集分成两类,分别训练两个模型
用于识别省份简称和右边的英文字符和数字
0-9,A到Z的数据集:

在这里插入图片描述
在这里插入图片描述

车牌的省份简写数据集:

在这里插入图片描述

在这里插入图片描述

训练过程:
使用文件夹的名称作为标签,文件中的图片作为数据
使用os.walk方法,主要用来遍历一个目录内各个子目录和子文件。
可以得到一个三元组(root,dirs,files),
root 所指的是当前正在遍历的这个文件夹的本身的地址
dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
os.path.basename(),返回path最后的名称,作为标签
cv2.imread(filepath) 读入训练数据
标好了训练数据和标签,就可以“喂”给分类器了:
model.train(chars_train, chars_label)
最后将训练好的模型保存到文件中,下次可以直接使用
model.save(“module\svm.dat”)

在这里插入图片描述

在这里插入图片描述

识别过程:
1.先加载之前训练好的模型

在这里插入图片描述

2.遍历所有分割出来的字符图片,调用model.predict(part_card)
依次识别车牌分割出来的所有字符图片
第一个字符调用中文svm识别
其他后续字符调用字母数字svm识别

在这里插入图片描述

识别结果:

在这里插入图片描述

在这里插入图片描述

四、实验结果

部分结果如下:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

结果:
.在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、总结

目前程序存在一些缺陷,例如,车的颜色,如果本身是蓝色绿色,或者是黄色,则无法通过颜色来确定车牌的位置。训练的数据集有限,识别中文字符时不是很准确等。

项目完整代码github地址


http://chatgpt.dhexx.cn/article/SsWEJE9X.shtml

相关文章

Java车辆牌照识别

Java车辆牌照识别 大家好,近期想做一个Java的车牌识别功能(借助第三方百度云车牌识别API),大致搜索了一下相关的博客文档,没有看到有相对完整详细的文章,于是准备写一篇稍微详细一点的文章说明&#xff0c…

基于opencv的车牌识别解析与代码

Jeremy Lin HQU 车牌识别太出名了,我也就花几天来了解下这个系统,并结合opencv进行实现。下面是一些介绍: 车辆牌照识别(License Plate Recognition,LPR)技术作为交通管理自动化的重要手段和车辆检测系统的…

基于matlab的车牌识别

20221126 新增 首先说一下这个工程的思路,很多朋友妄想直接拿着工程用,那是不可能的,自己学去叭,我是先将车牌号预处理之后,整个图片干净一点之后,进行每个字符的切割,但是是很投机取巧的方法&a…

车牌识别步骤及部分代码

目录(?)[-] 车牌预处理字符分割归一化处理细化处理字符特征提取神经网络训练车牌图像识别结果测试 1.车牌预处理 车牌预处理过程的好坏直接影响到车牌图像进行后期处理过程,比如车牌字符分割等。车牌预处理也是尽可能的消除噪声,减少后期处理带来的不必…

车牌识别(毕业设计+代码)

简介与效果 用python3opencv3做的中国车牌识别,包括算法和客户端界面,只有2个文件,一个是界面代码,一个是算法代码,点击即可出结果,方便易用! 大致的UI界面如下,点击输入图片&#…

真香!用Python检测和识别车牌(附代码)

车牌检测与识别技术用途广泛,可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计算机视觉和人工智能。 本文将使用Python创建一个车牌检测和识别程序。该程序对输入图像进行处理,检测和识别车牌,最后显示车牌字符,作为…

写好 API 接口文档,想清楚这几点

我在开始一个新的接口之前,需要进行以下判断: 请求协议是不是 HTTP、https? 请求体和响应格式是什么(XML、JSON、FormData、Raw)? API 是不是 RESTful 风格? 如果上面三个问题的答案都清楚了,就可以开…

API调用,API传参,面向对接开发,你真的会写接口文档吗?

📢📢📢📢📢📢 💗 你正在阅读 【梦想橡皮擦】 的博客 👍 阅读完毕,可以点点小手赞一下 🌻 发现错误,直接评论区中指正吧 📆 橡皮擦的第…

接口接口文档

一、接口简介 API(Application Programming Interface)即应用程序接口,可以任务是一个软件组件或一个Web服务与外界进行交互的接口,在这里接口可以和API划等号。 接口可以简单的理解为一个黑盒子,从一边输入参数&…

【编程规范】 后端API接口设计编写与文档编写参考

文章目录 0 统一规范0.1 理清业务流程0.2 定义前后端开发的接口规范0.3 定义接口文档 1 后端接口编写1.0 后端接口介绍1.0.1 接口交互1.0.2 返回格式1.0.3 CODE状态码1.0.4 Message(Msg)1.0.5 DATA 1.1 数据校验与异常处理1.1.1 参数校验设计1.1.2 全局异…

如何根据接口文档,写一个接口类(举例说明)

直接先贴图(文中的url做了修改): 代码如下: FeignClient(name "Z_KPI_API",url "${Z.KPI.url:http://11.11.111.111:8080}",fallback ZApiClientFallback.class) public Interface ZApiClient{PostMappin…

Postman写接口文档

文章目录 参考首先了解什么是postman那么后端如何用postman编写接口文档,并且让前端或者其他开发人员也一起同步协作呢?1. 注册登录postman2. 创建项目工作区3. 编写接口文档4. 添加协作人(这一步也可以在创建工作区之初就操作)5.…

怎么写一份好的接口文档?

编写一份优秀的接口文档会让软件开发中变得更加轻松,更有效率。这可是关键任务,写得好不仅可以帮助开发人员更好地理解和使用 API 接口,还可以提高整个团队的协作效率。 大家可以在线感受一下优秀的接口文档是怎样的:https://pets…

接口文档的使用

请求参数((GET方法就是Query参数,POST方法就是 Body参数) 在 axios中通过headers选项设置Headers请求头参数 在 axios中通过data选项设置Body请求体参数 在 axios中通过params选项设置Query参数 如果有 Query 参数,axios 会在内部把这个对象…

接口文档包含哪些内容?怎么才能写好接口文档?十年测试老司机来告诉你

目录 接口文档结构 参数说明 示例 错误码说明 语言基调通俗易懂 及时更新与维护 总结 那么我们该如何写好一份优秀的接口文档呢? 接口文档结构 首先我们要知道文档结构是什么样子的。接口文档应该有清晰明确的结构,以便开发人员能快速定位自己需…

详解接口文档的编写

正规的团队合作或者是项目对接,接口文档是非常重要的,一般接口文档都是通过开发人员写的。一个工整的文档显得是非重要。下面我总结下自己看到的优秀接口文档。 一、背景介绍 接口:API API(Application Programming Interface&…

如何写好API接口文档

日常项目开发的过程中,接口文档是必不可少的。后端工程师与前端工程师之间需要接口文档来定义数据传输协议、系统对外暴露接口需要文档来说明、系统之间相互调用需要文档来记录接口协议等等。对于一个完整的项目,接口文档是至关重要的。那我们如何写好一…

什么是接口文档

一、什么是接口文档? 在项目开发中,web项目的前后端分离开发,APP开发,需要由前后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发,到项目结束前都要一直维护。 二、为…

如何正确规范写接口文档

前言 正规的团队合作或者是项目对接,接口文档是非常重要的,一般接口文档都是通过开发人员写的。一个工整的文档显得是非重要。下面我将我看到的一篇接口文档做一个总结 开始吧!!! 接口1: 查询排重接口 接…

接口文档编写步骤与格式

接口文档编写步骤与格式 1. 基本步骤 梳理需求 依据业务写汉字版的接口文档。(可以减少在实际开发过程中的数据库调整) 写接口文档的过程中,会联想到需要上面样的数据。进而推出数据库设计。 数据库设计完毕。 正式的接口文档。 前端和后…