基于python的opencv图像处理实现对斑马线的检测示例


Posted in Python onNovember 29, 2020

基本思路

斑马线检测通过opencv图像处理来进行灰度值转换、高斯滤波去噪、阈值处理、腐蚀和膨胀后对图像进行轮廓检测,通过判断车辆和行人的位置,以及他们之间的距离信息,当车速到超过一定阈值时并且与行人距离较近时,则会被判定车辆为未礼让行人。

基于python的opencv图像处理实现对斑马线的检测示例

结果示例

基于python的opencv图像处理实现对斑马线的检测示例

实验流程

先通过视频截取一张图片来进行测试,如果结果满意之后再嵌套到视频中,从而达到想要的效果。

1.预处理(灰度值转换、高斯滤波去噪、阈值处理、腐蚀和膨胀)> 根据自己的需求来修改一些值

#灰度值转换
imgGray = cv2.cvtColor(copy_img,cv2.COLOR_BGR2GRAY)
#高斯滤波去噪
imgBlur = cv2.GaussianBlur(imgGray,(5,5),0)
#阈值处理
ret,thresh = cv2.threshold(imgBlur,127,255,cv2.THRESH_BINARY)
#腐蚀
imgEro = cv2.erode(thresh,kernel1,iterations=2)
#膨胀
imgDia = cv2.dilate(imgEro,kernel2,iterations=4)

预处理之后(如下图所示):

基于python的opencv图像处理实现对斑马线的检测示例

2.轮廓检测

#轮廓检测
_,contouts,hie = cv2.findContours(imgDia,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
cnt = contouts
cv2.drawContours(copy_img, cnt, -1, (0, 255, 0), 2)

全部的轮廓(如下图所示)

基于python的opencv图像处理实现对斑马线的检测示例

可以看到这并不是我们想要的,所以我们需要判断一下位置,选取我们感兴趣的区域。

3.感兴趣区域

根据自己图片或视频的需求来更改x,y,w,h位置信息数值。

for i in cnt:
  #坐标赋值
  x,y,w,h = cv2.boundingRect(i)
  #roi位置判断
  if y>350 and y<450 and x<1200 and w>50 and h>10:
    # 画出轮廓
    cv2.drawContours(copy_img, i, -1, (0, 255, 0), 2)

获取roi后完整结果(如下图所示)

基于python的opencv图像处理实现对斑马线的检测示例

4.完整代码

import cv2
import numpy as np
#定义两个核	(kernel_Ero用于腐蚀,kernel_Dia用于膨胀)
kernel_Ero = np.ones((3,1),np.uint8)
kernel_Dia = np.ones((3,5),np.uint8)

img = cv2.imread("../images/bmx.png")
copy_img = img.copy()
#原图copy修改尺寸
copy_img = cv2.resize(copy_img,(1600,800))
#灰度值转换
imgGray = cv2.cvtColor(copy_img,cv2.COLOR_BGR2GRAY)
#高斯滤波去噪
imgBlur = cv2.GaussianBlur(imgGray,(5,5),0)
#阈值处理
ret,thresh = cv2.threshold(imgBlur,127,255,cv2.THRESH_BINARY)
#腐蚀
imgEro = cv2.erode(thresh,kernel_Ero,iterations=2)
#膨胀
imgDia = cv2.dilate(imgEro,kernel_Dia,iterations=4)

#轮廓检测
_,contouts,hie = cv2.findContours(imgDia,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
cnt = contouts

for i in cnt:
  #坐标赋值
  x,y,w,h = cv2.boundingRect(i)
  #roi位置判断
  if y>350 and y<450 and x<1200 and w>50 and h>10:
    # 画出轮廓
    cv2.drawContours(copy_img, i, -1, (0, 255, 0), 2)

cv2.imshow("img",copy_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

总结

在业务需求中这种流程做出来的结果并不可行,只不过是把想要的东西框了出来,但是如果想要对交通场景判别机动车是否礼让行人行为的话则需要对坐标进行判断,可以通过从第一个斑马线的坐标到最后一个斑马线的坐标(横向)来画出一个大的矩形框(roi区域),然后根据这个矩形框的坐标来对机动车(已有坐标)坐标来进行行为判断,从而达到需求。

最后!!!

第一次接触opencv!所以请各位视觉领域的大佬们勿喷我这个小菜鸡!(/狗头)

代码量非常少,无泛化能力,很low的一种做法。。。不过对于小白的我来说学习opencv还是很有帮助滴!干就完了!奥利给!

到此这篇关于基于python的opencv图像处理实现对斑马线的检测示例的文章就介绍到这了,更多相关opencv 斑马线检测内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python创建列表并给列表赋初始值的方法
Jul 28 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
Oct 18 Python
python中nan与inf转为特定数字方法示例
May 11 Python
Python实现基于POS算法的区块链
Aug 07 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
Jan 11 Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 Python
python实现合并多个list及合并多个django QuerySet的方法示例
Jun 11 Python
python使用matplotlib绘制雷达图
Oct 18 Python
python程序如何进行保存
Jul 03 Python
Java Unsafe类实现原理及测试代码
Sep 15 Python
Python自定义sorted排序实现方法详解
Sep 18 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
Oct 10 Python
python3实现名片管理系统(控制台版)
Nov 29 #Python
python3实现简单飞机大战
Nov 29 #Python
Python基于Socket实现简易多人聊天室的示例代码
Nov 29 #Python
python3实现飞机大战
Nov 29 #Python
python之pygame模块实现飞机大战完整代码
Nov 29 #Python
Python使用Pygame绘制时钟
Nov 29 #Python
详解pandas赋值失败问题解决
Nov 29 #Python
You might like
PHP下一个非常全面获取图象信息的函数
2008/11/20 PHP
PHP strncasecmp字符串比较的小技巧
2011/01/04 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
2019/12/02 PHP
jQuery 使用个人心得
2009/02/26 Javascript
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
jQuery前端分页示例分享
2015/02/10 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
详解vue.js之props传递参数
2017/12/12 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
微信小程序修改swiper默认指示器样式的实例代码
2018/07/18 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
详解vuex状态管理模式
2018/11/01 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
[01:23:45]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第一场 1月22日
2021/03/11 DOTA
python调用fortran模块
2016/04/08 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
pybind11和numpy进行交互的方法
2019/07/04 Python
python多进程并行代码实例
2019/09/30 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
Anthropologie英国:美国家喻户晓的休闲服装和家居产品品牌
2018/12/05 全球购物
有原因的手表:Flex Watches
2019/03/23 全球购物
物流仓管员工作职责
2014/01/06 职场文书
婚礼新郎父母答谢词
2014/01/16 职场文书
护士毕业生自荐信
2014/02/07 职场文书
便利店投资创业计划书
2014/02/08 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
运动会100米广播稿
2015/08/19 职场文书
婚礼答谢词范文
2015/09/29 职场文书
在vue中import()语法不能传入变量的问题及解决
2022/04/01 Vue.js