基于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之yield表达式学习
Sep 02 Python
python中常用检测字符串相关函数汇总
Apr 15 Python
使用Python的判断语句模拟三目运算
Apr 24 Python
python清除字符串里非数字字符的方法
Jul 02 Python
Python用模块pytz来转换时区
Aug 19 Python
python中import reload __import__的区别详解
Oct 16 Python
Python探索之SocketServer详解
Oct 28 Python
使用Python对微信好友进行数据分析
Jun 27 Python
python下的opencv画矩形和文字注释的实现方法
Jul 09 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
Python Opencv图像处理基本操作代码详解
Aug 31 Python
详解Python为什么不用设计模式
Jun 24 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实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
2014/11/18 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
2015/10/27 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
表单元素的submit()方法和onsubmit事件应用概述
2013/02/01 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
为jquery的ajaxfileupload增加附加参数的方法
2014/03/04 Javascript
jQuery中:empty选择器用法实例
2014/12/30 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
vue-cli的eslint相关用法
2017/09/29 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
微信小程序实现点击卡片 翻转效果
2019/09/04 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
2021/02/15 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
python使用PIL模块实现给图片打水印的方法
2015/05/22 Python
分析Python中解析构建数据知识
2018/01/20 Python
Python中print函数简单使用总结
2019/08/05 Python
全球性的奢侈品梦工厂:Forzieri(福喜利)
2019/02/20 全球购物
实验教师岗位职责
2014/02/13 职场文书
室内拓展活动方案
2014/02/13 职场文书
正风肃纪剖析材料
2014/02/18 职场文书
林肯就职演讲稿
2014/05/19 职场文书
学校校庆演讲稿
2014/05/22 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
汇报材料怎么写
2014/12/30 职场文书
热血教师观后感
2015/06/10 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle