基于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数据结构之翻转链表
Feb 25 Python
详细分析python3的reduce函数
Dec 05 Python
Python tkinter事件高级用法实例
Jan 31 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
matplotlib 输出保存指定尺寸的图片方法
May 24 Python
python3.4实现邮件发送功能
May 28 Python
Python 做曲线拟合和求积分的方法
Dec 29 Python
在Python中字典根据多项规则排序的方法
Jan 21 Python
python使用Plotly绘图工具绘制气泡图
Apr 01 Python
python中count函数简单用法
Jan 05 Python
浅谈Python3多线程之间的执行顺序问题
May 02 Python
Jupyter Notebook内使用argparse报错的解决方案
Jun 03 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
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
PHP的运行机制与原理(底层)
2015/11/16 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
可以文本显示的公告栏的js代码
2007/03/11 Javascript
jQuery 性能优化指南 (1)
2009/05/21 Javascript
仿谷歌主页js动画效果实现代码
2013/07/14 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
推荐几个不错的console调试技巧实现
2019/12/20 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
[03:01]完美世界DOTA2联赛PWL S2 集锦第二期
2020/12/03 DOTA
在Python中使用列表生成式的教程
2015/04/27 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
python 处理string到hex脚本的方法
2018/10/26 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
用python读取xlsx文件
2020/12/17 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
社会工作专业求职信
2014/07/15 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
python Tkinter的简单入门教程
2021/04/11 Python
详解CSS玩转图片Base64编码
2021/05/25 HTML / CSS