基于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 20 Python
Python字典操作简明总结
Apr 13 Python
Python编写简单的HTML页面合并脚本
Jul 11 Python
Python图算法实例分析
Aug 13 Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 Python
python递归实现快速排序
Aug 18 Python
有关Python的22个编程技巧
Aug 29 Python
python basemap 画出经纬度并标定的实例
Jul 09 Python
python plotly绘制直方图实例详解
Jul 22 Python
Python 字符串类型列表转换成真正列表类型过程解析
Aug 26 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
Jun 29 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 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
一个程序下载的管理程序(二)
2006/10/09 PHP
木翼下载系统中说明的PHP安全配置方法
2007/06/16 PHP
php addslashes和mysql_real_escape_string
2010/01/24 PHP
PHP中替换键名的简易方法示例详解
2014/01/07 PHP
php实现递归的三种基本方式
2020/07/04 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
基于vue.js路由参数的实例讲解——简单易懂
2017/09/07 Javascript
简单谈谈js的数据类型
2017/09/25 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
Linux中安装Python的交互式解释器IPython的教程
2016/06/13 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
巴西最大的运动品牌:Olympikus
2020/07/14 全球购物
幼儿园教师工作感言
2014/02/15 职场文书
亲属关系公证书
2014/04/08 职场文书
演讲稿祖国在我心中
2014/05/04 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
园林技术专业求职信
2014/07/28 职场文书
物价局领导班子四风问题整改措施
2014/10/26 职场文书
2014年教师个人工作总结
2014/11/10 职场文书
十佳少年事迹材料
2014/12/25 职场文书
新教师教学工作总结
2015/08/14 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js