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解析xml模块封装代码
Feb 07 Python
python进阶教程之循环相关函数range、enumerate、zip
Aug 30 Python
python基于windows平台锁定键盘输入的方法
Mar 05 Python
使用Python的Tornado框架实现一个Web端图书展示页面
Jul 11 Python
python requests 测试代理ip是否生效
Jul 25 Python
Python爬虫之pandas基本安装与使用方法示例
Aug 08 Python
python连接mongodb密码认证实例
Oct 16 Python
机器学习实战之knn算法pandas
Jun 22 Python
pandas中的series数据类型详解
Jul 06 Python
用django设置session过期时间的方法解析
Aug 05 Python
TensorFlow设置日志级别的几种方式小结
Feb 04 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
Nov 18 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中文本操作的类
2007/03/17 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
PHP模板引擎Smarty中的保留变量用法分析
2016/04/11 PHP
javascript radio 联动效果
2009/03/04 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
JavaScript数据结构之二叉树的遍历算法示例
2017/04/13 Javascript
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
详解Webpack4多页应用打包方案
2020/07/16 Javascript
vue-cli3中配置alias和打包加hash值操作
2020/09/04 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
Python迭代器和生成器介绍
2015/03/06 Python
Python部署web开发程序的几种方法
2017/05/05 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
在django-xadmin中APScheduler的启动初始化实例
2019/11/15 Python
Python基于WordCloud制作词云图
2019/11/29 Python
python Qt5实现窗体跟踪鼠标移动
2019/12/13 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
解析python 中/ 和 % 和 //(地板除)
2020/06/28 Python
python实现二分查找算法
2020/09/18 Python
求职简历自荐信
2013/10/20 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
放假通知范文
2015/04/14 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
作弊检讨书范文
2015/05/06 职场文书
OpenCV-Python模板匹配人眼的实例
2021/06/08 Python
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL