python+opencv实现车牌定位功能(实例代码)


Posted in Python onDecember 24, 2019

写在前面

HIT大三上学期视听觉信号处理课程中视觉部分的实验三,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验三。

由于时间紧张,代码没有进行任何优化,实验算法仅供参考。

实验要求

对给定的车牌进行车牌识别

实验代码

代码首先贴在这里,仅供参考

源代码

实验代码如下:

import cv2
import numpy as np
def lpr(filename):
  img = cv2.imread(filename)
  # 预处理,包括灰度处理,高斯滤波平滑处理,Sobel提取边界,图像二值化
  # 对于高斯滤波函数的参数设置,第四个参数设为零,表示不计算y方向的梯度,原因是车牌上的数字在竖方向较长,重点在于得到竖方向的边界
  # 对于二值化函数的参数设置,第二个参数设为127,是二值化的阈值,是一个经验值
  gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
  GaussianBlur_img = cv2.GaussianBlur(gray_img, (3, 3), 0)
  Sobel_img = cv2.Sobel(GaussianBlur_img, -1, 1, 0, ksize=3)
  ret, binary_img = cv2.threshold(Sobel_img, 127, 255, cv2.THRESH_BINARY)
  # 形态学运算
  kernel = np.ones((5, 15), np.uint8)
  # 先闭运算将车牌数字部分连接,再开运算将不是块状的或是较小的部分去掉
  close_img = cv2.morphologyEx(binary_img, cv2.MORPH_CLOSE, kernel)
  open_img = cv2.morphologyEx(close_img, cv2.MORPH_OPEN, kernel)
  # kernel2 = np.ones((10, 10), np.uint8)
  # open_img2 = cv2.morphologyEx(open_img, cv2.MORPH_OPEN, kernel2)
  # 由于部分图像得到的轮廓边缘不整齐,因此再进行一次膨胀操作
  element = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
  dilation_img = cv2.dilate(open_img, element, iterations=3)
  # 获取轮廓
  contours, hierarchy = cv2.findContours(dilation_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
  # 测试边框识别结果
  # cv2.drawContours(img, contours, -1, (0, 0, 255), 3)
  # cv2.imshow("lpr", img)
  # cv2.waitKey(0)
  # 将轮廓规整为长方形
  rectangles = []
  for c in contours:
    x = []
    y = []
    for point in c:
      y.append(point[0][0])
      x.append(point[0][1])
    r = [min(y), min(x), max(y), max(x)]
    rectangles.append(r)
  # 用颜色识别出车牌区域
  # 需要注意的是这里设置颜色识别下限low时,可根据识别结果自行调整
  dist_r = []
  max_mean = 0
  for r in rectangles:
    block = img[r[1]:r[3], r[0]:r[2]]
    hsv = cv2.cvtColor(block, cv2.COLOR_BGR2HSV)
    low = np.array([100, 60, 60])
    up = np.array([140, 255, 255])
    result = cv2.inRange(hsv, low, up)
    # 用计算均值的方式找蓝色最多的区块
    mean = cv2.mean(result)
    if mean[0] > max_mean:
      max_mean = mean[0]
      dist_r = r
  # 画出识别结果,由于之前多做了一次膨胀操作,导致矩形框稍大了一些,因此这里对于框架+3-3可以使框架更贴合车牌
  cv2.rectangle(img, (dist_r[0]+3, dist_r[1]), (dist_r[2]-3, dist_r[3]), (0, 255, 0), 2)
  cv2.imshow("lpr", img)
  cv2.waitKey(0)
# 主程序
for i in range(5):
  lpr(str(i+1) + ".jpg")

参数调整

上述代码中,所有涉及到参数调整的函数,例如形态学操作,都需边调整边观察当前参数下的运行结果,待本步运行结果较好时,再继续写下一步。

该代码对具体图片要求较高,不同的图片可能无法成功识别车牌,此时可尝试依次调整预处理部分,形态学部分,hsv检测部分函数的参数

实验结果

python+opencv实现车牌定位功能(实例代码)

python+opencv实现车牌定位功能(实例代码)

python+opencv实现车牌定位功能(实例代码)

python+opencv实现车牌定位功能(实例代码)

python+opencv实现车牌定位功能(实例代码)

ps:图五是最难识别的图片,最后是通过调整hsv下限为[100, 60, 60]实现的

总结

以上所述是小编给大家介绍的python+opencv实现车牌定位功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python实现折半查找和归并排序算法
Apr 14 Python
Python深度优先算法生成迷宫
Jan 22 Python
python如何在列表、字典中筛选数据
Mar 19 Python
Python3基于sax解析xml操作示例
May 22 Python
python使用Matplotlib改变坐标轴的默认位置
Oct 18 Python
Python PIL库图片灰化处理
Apr 07 Python
Python批量安装卸载1000个apk的方法
Apr 10 Python
在Keras中利用np.random.shuffle()打乱数据集实例
Jun 15 Python
Python  word实现读取及导出代码解析
Jul 09 Python
Flask中sqlalchemy模块的实例用法
Aug 02 Python
Python实现Word文档转换Markdown的示例
Dec 22 Python
AI:如何训练机器学习的模型
Apr 16 Python
Python scrapy增量爬取实例及实现过程解析
Dec 24 #Python
Python 元组拆包示例(Tuple Unpacking)
Dec 24 #Python
Python 余弦相似度与皮尔逊相关系数 计算实例
Dec 23 #Python
Python编译成.so文件进行加密后调用的实现
Dec 23 #Python
Cython编译python为so 代码加密示例
Dec 23 #Python
Python编译为二进制so可执行文件实例
Dec 23 #Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 #Python
You might like
php+mysql事务rollback&commit示例
2010/02/08 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
Javascript 跨域知识详细介绍
2016/10/30 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
JS实现碰撞检测的方法分析
2018/01/19 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
Angular8引入百度Echarts进行图表分析的实现代码
2019/11/27 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
Python 流程控制实例代码
2009/09/25 Python
基于python实现聊天室程序
2018/07/27 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
2018/12/17 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
幼儿园园长岗位职责
2013/11/26 职场文书
晚会邀请函范文
2014/01/24 职场文书
商场主管竞聘书
2014/03/31 职场文书
社会稳定风险评估方案
2014/06/02 职场文书
志愿者活动总结报告
2014/06/27 职场文书
工厂见习报告范文
2014/10/31 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
Elasticsearch 索引操作和增删改查
2022/04/19 Python
vue3.0 数字翻牌组件的使用方法详解
2022/04/20 Vue.js