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 optparse模块使用实例
Apr 09 Python
python输出当前目录下index.html文件路径的方法
Apr 28 Python
Python中字符串的修改及传参详解
Nov 30 Python
解决Python print 输出文本显示 gbk 编码错误问题
Jul 13 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 Python
使用python实现抓取腾讯视频所有电影的爬虫
Apr 15 Python
使用Python实现毫秒级抢单功能
Jun 06 Python
Python-Tkinter Text输入内容在界面显示的实例
Jul 12 Python
基于python实现把图片转换成素描
Nov 13 Python
在OpenCV里使用Camshift算法的实现
Nov 22 Python
通过实例了解python__slots__使用方法
Sep 14 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 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
香妃
2021/03/03 冲泡冲煮
实现PHP多线程异步请求的3种方法
2014/01/17 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
PHP开发中常用的十个代码样例
2016/02/02 PHP
php微信开发之带参数二维码的使用
2016/08/03 PHP
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
在JavaScript中正确引用bind方法的应用
2015/05/11 Javascript
Treegrid的动态加载实例代码
2016/04/29 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
基于Vue2.0+ElementUI实现表格翻页功能
2017/10/23 Javascript
vue 登录滑动验证实现代码
2018/08/24 Javascript
如何解决React官方脚手架不支持Less的问题(小结)
2018/09/12 Javascript
十分钟教你上手ES2020新特性
2020/02/12 Javascript
Vue中父子组件的值传递与方法传递
2020/09/28 Javascript
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
详解python3百度指数抓取实例
2016/12/12 Python
基于ID3决策树算法的实现(Python版)
2017/05/31 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
Pandas的Apply函数具体使用
2020/07/21 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
医科大学生的自我评价
2013/12/04 职场文书
教师自荐信范文
2013/12/09 职场文书
银行实习生的自我评价
2013/12/09 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
2014年世界艾滋病日宣传活动总结
2014/11/18 职场文书
大学生活感想
2015/08/10 职场文书