Python 基于 opencv 车牌识别系统的研究与实现

2023-11-20

源码下载地址https://download.csdn.net/download/gdutxiaoxu/87419195

原理简介

  • 车牌字符识别使用的算法是opencv的SVM
  • opencv的SVM使用代码来自于opencv附带的sample,StatModel类和SVM类都是sample中的代码
  • 训练数据文件svm.datsvmchinese.dat
  • 使用图像边缘车牌颜色定位车牌,再识别字符
# 主函数中初始化车牌识别需要的算法函数,并加载训练数据文件
self.predictor = predict.CardPredictor()
self.predictor.train_svm()
# lib下算法函数加载训练数据文件
class CardPredictor:
    def __init__(self):
        pass
    # 加载训练数据文件
    def train_svm(self):
        # 识别英文字母和数字
        self.model = SVM(C=1, gamma=0.5)
        # 识别中文
        self.modelchinese = SVM(C=1, gamma=0.5)
        if os.path.exists("lib/svm.dat"):
            self.model.load("lib/svm.dat")
        if os.path.exists("lib/svmchinese.dat"):
            self.modelchinese.load("lib/svmchinese.dat")
# main.py 主函数中车牌识别函数
    def pic(self, pic_path):
        # 以uint8方式读取 pic_path 放入 img_bgr 中,cv2.IMREAD_COLOR读取彩色照片
        img_bgr = img_math.img_read(pic_path)
        # 缩小图片 转化成灰度图像 创建20*20的元素为1的矩阵 开操作,并和img重合 基于OTSU的二值化处理 找到图像边缘
        # first_img, oldimg 已经处理好的图像文件 原图像文件
        first_img, oldimg = self.predictor.img_first_pre(img_bgr)
        # 未开启摄像头时显示经过resize的图片
        if not self.cameraflag:
            self.imgtk = self.get_imgtk(img_bgr)
            self.image_ctl.configure(image=self.imgtk)
        # 开始进行识别
        # img_color_contours形状定位识别 输入 预处理好的图像 原图像 
        # 排除面积最小的点 进行矩形矫正 转换 分隔字符 分离车牌字符 
        # return 识别到的字符、定位的车牌图像、车牌颜色
        # img_only_color颜色定位识别  输入 预处理好的图像 原图像 
        # 根据阈值找到对应颜色 认为水平方向,最大的波峰为车牌区域 查找垂直直方图波峰 去掉车牌上下边缘1个像素,避免白边影响阈值判断 分隔字符 分离车牌字符 
        # return 识别到的字符、定位的车牌图像、车牌颜色
        th1 = ThreadWithReturnValue(target=self.predictor.img_color_contours, args=(first_img, oldimg))
        th2 = ThreadWithReturnValue(target=self.predictor.img_only_color, args=(oldimg, oldimg, first_img))
        th1.start()
        th2.start()
        r_c, roi_c, color_c = th1.join()
        r_color, roi_color, color_color = th2.join()
        # 显示 识别到的字符、定位的车牌图像、车牌颜色
        self.show_roi2(r_color, roi_color, color_color)
        self.show_roi1(r_c, roi_c, color_c)

一. 车牌图像预处理

  • 1.将彩色图像转化为灰度图
    在这里插入图片描述

  • 2.采用20*20模版对图像进行高斯模糊来缓解由照相机或其他环境噪声(如果不这么做,我们会得到很多垂直边缘,导致错误检测。)
    在这里插入图片描述

  • 3.使用Otsu自适应阈值算法获得图像二值化的阈值,并由此得到一副二值化图片
    在这里插入图片描述

  • 4.采用闭操作,去除每个垂直边缘线之间的空白空格,并连接所有包含 大量边缘的区域(这步过后,我们将有许多包含车牌的候选区域)
    在这里插入图片描述

  • 5.由于大多数区域并不包含车牌,我们使用轮廓外接矩形的纵横比和区域面积,对这些区域进行区分。

    • a.首先使用findContours找到外部轮廓
    • b.使用minAreaRect获得这些轮廓的最小外接矩形,存储在vector向量中
    • c.使用面积和长宽比阈值,作基本的验证

二. 车牌图像定位

车牌定位的主要工作是从摄入的汽车图像中找到汽车牌照所在位置,并把车牌从该区域中准确地分割出来,供字符分割使用。 因此,牌照区域的确定是影响系统性能的重要因素之一,牌照的定位与否直接影响到字符分割和字符识别的准确率。 目前车牌定位的方法很多,但总的来说可以分为以下4类:

  • (1)基于颜色的分割方法,这种方法主要利用颜色空间的信息,实现车牌分割,包括彩色边缘算法、颜色距离和相似度算法等;
  • (2)基于纹理的分割方法,这种方法主要利用车牌区域水平方向的纹理特征进行分割,包括小波纹理、水平梯度差分纹理等;
  • (3)基于边缘检测的分割方法;
  • (4)基于数学形态法的分割方法。

为了代码实现上的方便,我采用的是基于边缘检测的分割方法和基于颜色的分割方法。

  • 车牌中有大量的垂直边缘,这个特征可以定位车牌。
  • 根据阈值找到对应颜色来定位车牌。

三. 车牌图像矩形矫正

因为摄像头和车辆车牌之间的角度有不同的变化, 一般所拍摄的车牌图像都不是理想状态下的矩形, 如果这样将会给后面的字符分割带来不利的影响, 增加了字符分割的难度, 更增加了后续的字符识别的困难, 造成识别率下降。因此, 在字符分割之前, 我们需要进行对倾斜的矩形车牌进行校正。

四. 车牌图像字符分割

要识别车牌字符,前提是先进行车牌字符的正确分割与提取。字符分割的任务是把多列或多行字符图像中的每个字符从整个图像中切割出来成为单个字符。车牌字符的正确分割对字符的识别是很关键的。传统的字符分割算法可以归纳为以下三类:直接分割法、基于识别基础上的分割法、自适应分割线类聚法。直接分割法简单,但它的局限是分割点的确定需要较高的准确性;基于识别基础上的分割法是把识别和分割结合起来,但是需要识别的高准确性,它根据分类和识别的耦合程度又有不同的划分;自适应分割线聚类法是要建立一个分类器,用它来判断图像的每一列是否是分割线,它是根据训练样本来进行自适应学习的神经网络分类器,但对于粘连字符训练困难。也有直接把字符组成的单词当作一个整体来识别的,诸如运用马尔科夫数学模型等方法进行处理,这些算法主要应用于印刷体文本识别。

  • 已经定位好的车牌图像
    在这里插入图片描述

  • 车牌图像灰度化
    在这里插入图片描述

  • 车牌图像二值化
    在这里插入图片描述

  • 车牌二值化图像去除上下边框
    在这里插入图片描述

  • 去掉车牌上下边缘1个像素,避免白边影响阈值判断
    在这里插入图片描述

  • 分离车牌字符

五. 车牌图像字符识别

  • 去除固定车牌的铆钉
  • 对字符分割的图块使用训练好的svm模型进行识别
  • 判断最后一个数是否是车牌边缘,假设车牌边缘被认为是1,1太细,认为是边缘

源码下载地址

源码下载地址https://download.csdn.net/download/gdutxiaoxu/87419195

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 基于 opencv 车牌识别系统的研究与实现 的相关文章

随机推荐

  • A Gentle Introduction to Graph Neural Networks(一篇GNN的博客)

    图神经网络 读A Gentle Introduction to Graph Neural Networks笔记 1 直观上的理解 layer后面的标号代表是第几层 要注意每一层都是由比它更深的层相互影响的 比如layer2他可能只有laye
  • 关于专栏基于WordPress的手把手建站教程

    如何建立一个自己的个人博客 建站需要什么基础知识 建站的过程是什么 其实建站真的很容易 WordPress已经很成熟了 基本不需要什么基础知识 如何建站这也是我写的比较用心的一个教程 因此准备写一个手把手教你建站系列教程 本教程基于系统Ub
  • mac 和华为手机互传文件

    参考博客 华为手机传输文件到Mac电脑上 简书 应用场景 1 把资料从手机上的数据备份到电脑上或反向操作 2 需要把资料传给朋友的时候 有两种方式 第一种是通过数据线 传输速度快 但是需要安装软件和使用数据线 具体流程如下 1 先准备一个双
  • 异常检测主要方法总结

    最近对预测及异常检测进行了一些研究和学习 把所学东西做一个汇总整理 欢迎交流拍砖 侵权删 目录 一 时间序列概念 二 时间序列异常检测 三 时序类型 四 异常类型 4 1 点异常 4 2 上下文异常 4 3 集合异常 五 重要概念 5 1
  • 人脸识别趟坑历程

    1 人脸识别概述 人脸识别 是基于人的脸部特征信息进行身份识别的一种生物识别技术 用摄像机或摄像头采集含有人脸的图像或视频流 并自动在图像中检测和跟踪人脸 进而对检测到的人脸进行脸部的一系列相关技术 其中技术包括图像采集 特征定位 身份的确
  • jmeter3.3调用数据库写存储过程注意点

    1 数据库配置页面 2 创建存储过程要保证库里没有同名 本来这句drop语句放在创建存储过程里面的 发现会导致不会执行存储过程 一定要分开写 query type选择 update statement 3 创建存储过程 variable n
  • 5-6)视图与索引

    文章目录 视图 一 视图概述 1 视图的定义 2 视图的分类 3 视图的优缺 二 创建视图 使用T SQL 语句创建视图 创建视图注意的问题 三 使用视图 视图 视图是一种虚拟的数据表 Virtual table 来源于数据表和其他数据 一
  • 实验一:交换机的配置与管理-计算机网络

    交换机的配置与管理 技术原理 交换机的管理方式基本分为两种 带内管理和带外管理 通过交换机的Console端口管理交换机属于带外管理 这种管理方式不占用交换机的网络端口 第一次配置交换机必须利用Console端口进行配置 交换机的命令行操作
  • Python爬虫学习之数据提取(XPath)

    Python爬虫学习之数据提取XPath 概述 常用规则 运算符及介绍 准备工作 实例 文本获取 属性获取 属性值匹配 属性多值匹配 多属性匹配 按序选择 概述 XPath的全称是XML Path Language 即XML路径语言 用来在
  • url参数加密_百度逆推link?url=xxx加密算法“反推技术秒收"

    熟悉百度的站长都知道 凡是被百度搜索引擎收录的网站链接 都会生成一个以baidu开头的多参数跳转链接 而所谓 百度反推技术 的原理就是把百度生成的这个链接地址换成自己想要被收录的页面链接就可以了 然后再进行百度快照的投诉 就可以达到秒来蜘蛛
  • SQL:exec sp_executesql 用法

    這種是無效的過程 declare sql nvarchar 500 where nvarchar 500 i nvarchar 64 p nvarchar 50 id int set id 5 set sql select p AreaCo
  • 机器学习系列(8):人脸识别基本原理及Python实现

    众所周知 人脸识别和人脸验证已经得到大量应用 那么它们之间有什么异同呢 又是如何实现的呢 这里是机器学习系列第八篇 带你揭开它们神秘的面纱 若图片挂了 可移步 https mp weixin qq com s biz MzU4NTY1NDM
  • STC仿真失败

    原因就是购买的下载工具不适合在烧写STC8H3K64S仿真固件后再将该下载工具作为USB转串口工具连接PC与目标板 推测是接入仿真时会重启目标板 不打算细究 换一个普通串口就好了
  • VS编译.cu文件源文件无法打开matrix.h和mex.h问题

    配置好cu和VS相关库文件后CUDA程序仍然报错 无法打开matrix h和mex h 解决办法 1 这两个头文件是matlab中的 可能无法直接在VS中调用 可以通过添加外部依赖项的方法将matlab中的头文件的文件路径添加进来 VS中按
  • 机器学习:聚类算法API初步使用

    学习目标 知道聚类算法API的使用 1 api介绍 sklearn cluster KMeans n clusters 8 参数 n clusters 开始的聚类中心数量 整型 缺省值 8 生成的聚类数 即产生的质心 centroids 数
  • SQL批量处理+JDBC操作大数据及工具类的封装

    SQL批量处理 JDBC操作大数据及工具类的封装 一 批处理 批量处理sql语句 在jdbc的url中添加rewriteBatchedStatements true参数 可以提高批处理执行效率 在我们进行大批量数据操作的时候 需要采用批处理
  • 不使用80,443,端口,域名还需要备案吗?域名没有备案应该怎么选服务器。

    在互联网日益发达的今天 越来越多的个人 企业 公司涌入其中 在服务器 域名 大量供需的情况下身为一个小白应该要注意什么呢 首先要明确你所需要的服务器是国内大陆服务器 如 杭州 扬州 镇江 宁波等 还是海外服务器 如 香港 美国 日本 韩国等
  • uniapp写h5如何封装一个图片上传预览并且有进度条的组件

    开发背景 首先项目是用uniapp写的h5项目 要求能上传 预览 和进度条展示 还要求总览的时候用缩略图 点开预览要原图 不得不吐槽一下 开发环境 uniapp 阿里云存储 先看截图效果 好了直接上代码 photo picker vue
  • Python基础知识点梳理

    本文简要梳理了Python基础知识的大体框架 目录 一 变量和赋值 二 分支和循环 1 分支结构 2 循环结构 三 数据结构 四 函数 lambda函数 匿名函数 五 面向对象 1 封装 2 继承 六 模块和包 一 变量和赋值 变量是编程语
  • Python 基于 opencv 车牌识别系统的研究与实现

    源码下载地址 https download csdn net download gdutxiaoxu 87419195 原理简介 车牌字符识别使用的算法是opencv的SVM opencv的SVM使用代码来自于opencv附带的sample