基于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用于url解码和中文解析的小脚本(python url decoder)
Aug 11 Python
Python中使用插入排序算法的简单分析与代码示例
May 04 Python
python实现rsa加密实例详解
Jul 19 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
Aug 07 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 Python
Python实现的调用C语言函数功能简单实例
Mar 13 Python
Django结合ajax进行页面实时更新的例子
Aug 12 Python
python3.6生成器yield用法实例分析
Aug 23 Python
python多进程间通信代码实例
Sep 30 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
Feb 10 Python
史上最详细的Python打包成exe文件教程
Jan 17 Python
Python自动化测试基础必备知识点总结
Feb 07 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制作静态网站的模板框架(三)
2006/10/09 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
javascript正则匹配汉字、数字、字母、下划线
2014/04/10 Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
2016/08/03 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
对angularJs中ng-style动态改变样式的实例讲解
2018/09/30 Javascript
React 路由懒加载的几种实现方案
2018/10/23 Javascript
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
python写的ARP攻击代码实例
2014/06/04 Python
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
深入解析Python中的lambda表达式的用法
2015/08/28 Python
python Django模板的使用方法
2016/01/14 Python
python结合API实现即时天气信息
2016/01/19 Python
理解Python中的With语句
2016/03/18 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
大学生军训自我鉴定
2014/02/12 职场文书
委托公证书
2014/04/08 职场文书
春节慰问信范文
2015/02/15 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书