基于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多线程扫描端口示例
Jan 16 Python
Python实现的简单万年历例子分享
Apr 25 Python
Python与shell的3种交互方式介绍
Apr 11 Python
Python生成随机验证码的两种方法
Dec 22 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
对python中的iter()函数与next()函数详解
Oct 18 Python
解决项目pycharm能运行,在终端却无法运行的问题
Jan 19 Python
Django之模板层的实现代码
Sep 09 Python
Python大数据之从网页上爬取数据的方法详解
Nov 16 Python
Tensorflow累加的实现案例
Feb 05 Python
python如何调用字典的key
May 25 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
Dec 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学习笔记之面向对象编程
2012/12/29 PHP
PHP中把对象转换为关联数组代码分享
2015/04/09 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
js 获取和设置css3 属性值的实现方法
2013/05/06 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
jquery插件推荐 jquery.cookie
2014/11/09 Javascript
jQuery自动添加表单项的方法
2015/07/13 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
2015/10/09 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
AngularJS自定义指令实现面包屑功能完整实例
2017/05/17 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
VUE脚手架具体使用方法
2019/05/20 Javascript
JavaScript静态作用域和动态作用域实例详解
2019/06/17 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
2019/11/18 jQuery
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
vue在线动态切换主题色方案
2020/03/26 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
window下eclipse安装python插件教程
2017/04/24 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
HTML5 通信API 跨域门槛将不再高、数据推送也不再是梦
2013/04/25 HTML / CSS
世界各地的当地人的食物体验:Eatwith
2019/07/26 全球购物
大学生党员承诺书
2014/05/20 职场文书
企业管理标语
2014/06/10 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
债务纠纷委托书范本
2014/10/14 职场文书
2015年度物流工作总结
2015/04/30 职场文书