基于python的opencv图像处理实现对斑马线的检测示例
作者:舔狗小明 时间:2021-07-30 23:02:44
基本思路
斑马线检测通过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)
预处理之后(如下图所示):
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)
全部的轮廓(如下图所示)
可以看到这并不是我们想要的,所以我们需要判断一下位置,选取我们感兴趣的区域。
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后完整结果(如下图所示)
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还是很有帮助滴!干就完了!奥利给!
来源:https://blog.csdn.net/weixin_44912902/article/details/109010734
标签:opencv,斑马线,检测
0
投稿
猜你喜欢
Python搭建代理IP池实现检测IP的方法
2023-10-05 04:42:51
用 SA FileUp 上传多文件
2008-07-04 13:44:00
windows下MySQL5.6版本安装及配置过程附有截图和详细说明
2024-01-13 18:58:56
Python unittest生成测试报告过程解析
2023-02-18 13:13:17
基于pycharm的beautifulsoup4库使用方法教程
2022-12-05 22:47:05
浅析python函数式编程
2022-07-14 22:39:16
使用python实现定时报天气的示例代码
2021-12-27 14:56:10
SQL Server 2016 TempDb里的显著提升
2024-01-24 17:15:47
使用Python遍历文件夹实现查找指定文件夹
2021-01-19 09:23:06
JS实现给对象动态添加属性的方法
2024-04-22 13:07:07
Python补齐字符串长度的实例
2023-09-24 21:51:43
详解用python生成随机数的几种方法
2022-01-24 14:17:42
用 Python 元类的特性实现 ORM 框架
2022-02-12 12:45:24
Python格式化日期时间操作示例
2022-04-23 23:07:19
Django项目搭建之实现简单的API访问
2021-05-20 23:21:33
python 查找字符串是否存在实例详解
2023-09-22 21:31:17
ThinkPHP实现将本地文件打包成zip下载
2024-05-11 09:48:29
Git 命令行教程及实例教程(附github注册)
2022-02-17 12:36:25
Keras设定GPU使用内存大小方式(Tensorflow backend)
2021-12-20 22:15:12
python基础之并发编程(一)
2021-01-10 08:56:15