基于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 初始化多维数组代码
Sep 06 Python
Python  __getattr__与__setattr__使用方法
Sep 06 Python
python抓取网页中图片并保存到本地
Dec 01 Python
Python+matplotlib实现填充螺旋实例
Jan 15 Python
mac安装scrapy并创建项目的实例讲解
Jun 13 Python
python os.listdir按文件存取时间顺序列出目录的实例
Oct 21 Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 Python
pytorch实现对输入超过三通道的数据进行训练
Jan 15 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
python em算法的实现
Oct 03 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
Nov 06 Python
python实现简单的井字棋
May 26 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/07/02 PHP
网站用php实现paypal整合方法
2010/11/28 PHP
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
IE下写xml文件的两种方式(fso/saveAs)
2013/08/05 Javascript
a标签click和href执行顺序探讨
2014/06/23 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
2016/11/29 Javascript
微信小程序教程系列之视图层的条件渲染(10)
2017/04/19 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
使用Node.js实现RESTful API的示例
2017/08/01 Javascript
JS实现简单短信验证码界面
2017/08/07 Javascript
AngularJS日程表案例详解
2017/08/15 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
[00:35]TI7不朽珍藏III——寒冰飞龙不朽展示
2017/07/15 DOTA
python使用any判断一个对象是否为空的方法
2014/11/19 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
如何用SQL语句进行模糊查找
2015/09/25 面试题
介绍一下grep命令的使用
2012/06/28 面试题
办公室经理岗位职责
2014/01/01 职场文书
答谢会策划方案
2014/05/12 职场文书
城市规划应届毕业生自荐信
2014/07/04 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
全陪导游词
2015/02/04 职场文书
运动会5000米加油稿
2015/07/21 职场文书
暑假生活随笔
2015/08/15 职场文书
Redis性能监控的实现
2021/07/09 Redis
Smart 2 车辆代号 HC11 全新谍照曝光
2022/04/21 数码科技