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代码打包为jar软件的简单方法
Aug 04 Python
python基于itchat实现微信群消息同步机器人
Feb 27 Python
pygame游戏之旅 添加游戏暂停功能
Nov 21 Python
Python 等分切分数据及规则命名的实例代码
Aug 16 Python
django实现支付宝支付实例讲解
Oct 17 Python
Python中Flask-RESTful编写API接口(小白入门)
Dec 11 Python
python主线程与子线程的结束顺序实例解析
Dec 17 Python
python实现大战外星人小游戏实例代码
Dec 26 Python
Tensorflow限制CPU个数实例
Feb 06 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 Python
python 利用jieba.analyse进行 关键词提取
Dec 17 Python
神经网络训练采用gpu设置的方式
Mar 03 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获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
js资料toString 方法
2007/03/13 Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
JS远程获取网页源代码实例
2013/09/05 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
JS中的防抖与节流及作用详解
2019/04/01 Javascript
基于vue实现一个神奇的动态按钮效果
2019/05/15 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
python自动安装pip
2014/04/24 Python
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
django 创建过滤器的实例详解
2017/08/14 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
2020/02/26 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
几道数据库的概念性面试题
2014/05/30 面试题
财务管理专业毕业生求职信范文
2013/09/21 职场文书
通信工程毕业生求职信
2013/11/16 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python