基于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基础教程之popen函数操作其它程序的输入和输出示例
Feb 10 Python
Cpy和Python的效率对比
Mar 20 Python
python统计日志ip访问数的方法
Jul 06 Python
Python的for和break循环结构中使用else语句的技巧
May 24 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
Feb 07 Python
python使用folium库绘制地图点击框
Sep 21 Python
python得到windows自启动列表的方法
Oct 14 Python
python最小生成树kruskal与prim算法详解
Jan 17 Python
Python告诉你木马程序的键盘记录原理
Feb 02 Python
Django 源码WSGI剖析过程详解
Aug 05 Python
使用python接受tgam的脑波数据实例
Apr 09 Python
Python中requests做接口测试的方法
May 30 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
Zerg基本策略
2020/03/14 星际争霸
如何在PHP程序中防止盗链
2008/04/09 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
2014/10/16 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
2015/07/09 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
JS 动态获取节点代码innerHTML分析 [IE,FF]
2009/11/30 Javascript
jquery 插件学习(一)
2012/08/06 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
2015/01/09 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
2018/03/05 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
Vue 实现手动刷新组件的方法
2019/02/19 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
Python 高级专用类方法的实例详解
2017/09/11 Python
python监控文件并且发送告警邮件
2018/06/21 Python
Python删除n行后的其他行方法
2019/01/28 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
对于Python深浅拷贝的理解
2019/07/29 Python
Django中使用极验Geetest滑动验证码过程解析
2019/07/31 Python
解决import tensorflow导致jupyter内核死亡的问题
2021/02/06 Python
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
房地产开盘策划方案
2014/02/10 职场文书
网络编辑求职信
2014/04/30 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
Python办公自动化PPT批量转换操作
2021/09/15 Python
Python 视频画质增强
2022/04/28 Python