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 CSV模块使用实例
Apr 09 Python
Python中的ConfigParser模块使用详解
May 04 Python
Python处理PDF及生成多层PDF实例代码
Apr 24 Python
python实现外卖信息管理系统
Jan 11 Python
Python入门之后再看点什么好?
Mar 05 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
Jun 28 Python
python3.6连接mysql数据库及增删改查操作详解
Feb 10 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
基于Python3.7.1无法导入Numpy的解决方式
Mar 09 Python
python进行参数传递的方法
May 12 Python
深入了解NumPy 高级索引
Jul 24 Python
Python list列表删除元素的4种方法
Nov 01 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 获取ip地址代码汇总
2015/07/05 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
jquery控制左右箭头滚动图片列表的实例
2013/05/20 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
Javascript实现关闭广告效果
2021/01/29 Javascript
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
Python中你应该知道的一些内置函数
2017/03/31 Python
python实现俄罗斯方块
2018/06/26 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
Python 移动光标位置的方法
2019/01/20 Python
Python greenlet和gevent使用代码示例解析
2020/04/01 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
详解python metaclass(元类)
2020/08/13 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
介绍下static、final、abstract区别
2015/01/30 面试题
人力资源专业推荐信
2013/11/29 职场文书
公司庆典邀请函范文
2014/01/13 职场文书
敬老文明号事迹材料
2014/01/16 职场文书
巾帼建功标兵事迹材料
2014/05/11 职场文书
爱的奉献演讲稿
2014/09/10 职场文书
股东授权委托书范本
2014/09/13 职场文书
环卫工作汇报材料
2014/10/28 职场文书
停发工资证明范本
2015/06/12 职场文书
导游词之桂林
2019/08/20 职场文书
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python