python

您所在的位置:网站首页 汽车牌照如何识别 python

python

2024-07-09 05:32| 来源: 网络整理| 查看: 265

本文为基于python的opencv的车牌定位源码+讲解。

文章目录 一. 车牌定位整体构架 1. 整体思路 2. 分析原理 3. 算法构造 ①. 灰度拉伸算法 ②. 二值化的阈值选取 ③. 合适的分值的选取 二. 代码 总结

一. 车牌定位整体构架 1. 整体思路

首先,车牌定位是车牌识别的第一步也是必要的一步,同时,车牌定位的好坏直接性的决定了车牌识别的好坏,因此车牌定位是一定要尽量好的实现。对一张图片来说,车牌定位的几个过程其实很简单。

去除噪音 通过颜色特征筛选(或者通过形状筛选) 通过形态特征再筛选(或通过颜色特征再筛选) 定位候选区域列表 选出最优的候选区域 画出矩形,返回矩形的对角顶点。

其实过程并不复杂,但是每一步的各种操作混杂在一块就令如我这样的小白懵。不过问题不大,我们分开来看。

2. 分析原理

选择从通过形态特征先筛选入手。 先将图片转化为灰度图(边缘检测和轮廓识别需要灰度图),要去除噪音,防止不必要的干扰,通过灰度拉伸算法获取效果更良好的灰度图。做边缘检测,轮廓发现,之后找出所有的矩形轮廓,利用国内车牌的特征选出最优的几个轮廓。接着对这几个轮廓进行色彩特征分析,转化为HSV色彩空间(为了使用inrange方法找出掩膜),找出掩膜,利用算法求得每个掩膜的评分,选出最优评分的掩膜,并返回其图片下标。是不是一气呵成。

3. 算法构造

要实现良好的车牌定位,肯定是不能直接用其固定好的API因为,API终究是局限于语言,它考虑的没有办法像活生生的人那么多。如果你足够优秀的话,一定程度上是可以超越API的。

①. 灰度拉伸算法

灰度拉伸又叫对比度拉伸,它是最基本的一种灰度变换,使用的是最简单的分段线性变换函数,它的主要思想是提高图像处理时灰度级的动态范围。它可以改善图像,说的白一点,它可以让有些不可见的地方变得可见。这是防止图片的拍摄角度或者光线问题导致车牌不清晰。 公式:g(x,y) = 255 / (B - A) * [f(x,y) - A]

②. 二值化的阈值选取

图像二值化时边缘检测的必备,我们学习过二值化,不论是自适应二值化,还是otus二值化,其自动算出的阈值在部分图的表现很好,但我们不能直接带入车牌图像,因为APi提供的二值化时考虑全图,或者一个个部分块,但是我们需要的是足够清晰不会影响到车牌轮廓的二值化。因此选择自己构造阈值。 个人建议利用阈值如下:

ret=max_value-(max_value-min_value)/2

其中为最大像素点和最小像素点,不妨思考一下,如果图片为一张纯色图,那么阈值就为该像素值。如果图片是最大为250最小为0那么阈值为122,蓝色和白色为高像素值,这样无论如何都能找出其合适的轮廓。

在这里插入图片描述

③. 合适的分值的选取

学习目标识别的朋友一定经常和分值打交道把,通过一系列方法选出待选区域,最后评分,没有达到期望,就继续循环,继续评分,直到满足或者循环停止。 这里的评分当然没有用到神经网络的东西,而是利用选好的掩膜的像素值来评掩膜得到的像素值是255与0,那么我们寻找掩膜的条件是蓝色,注意这个蓝色,那么是不是可以想象,如果蓝色够多,那么分就够高呢,当然可以,于是可以对每个图像得到的HSV三个通道进行加权求和,若是分数最够则认定为车牌,目前测试的图片,该方法吗,没有失败的。

二. 代码 ''' 车牌识别 2021/2/24 python3.6 by ksks14 ''' #导库 import cv2 as cv import numpy as np import os #方法 #导入图片资源 path为路径 def load_image(path): src=cv.imread(path) return src #灰度拉伸方法 ''' 它可以有选择的拉伸某段灰度区间以改善输出图像,如果一幅图像的灰度集中 在较暗的区域而导致图像偏暗,可以用灰度拉伸功能来拉伸(斜率>1)物体灰度区间以改善图像;同样如果图像灰度集中在较亮的区域而导致图像偏亮,也可以用灰 度拉伸功能来压缩(斜率


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3