基于python的opencv图像处理实现对斑马线的检测
基本思路斑马线检测通过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)
预处理之后(如下图所示):
文章插图
2.轮廓检测
#轮廓检测_,contouts,hie = cv2.findContours(imgDia,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)cnt = contoutscv2.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 cv2import 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 = contoutsfor 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区域) , 然后根据这个矩形框的坐标来对机动车(已有坐标)坐标来进行行为判断 , 从而达到需求 。
- 文件系统(02):基于SpringBoot管理Xml和CSV
- 第2天 | 12天搞定Python,运行环境(详细步骤)
- 「OpenCV入门教程」线性滤波方框滤波、均值滤波与高斯滤波
- Python高级技巧:用一行代码减少一半内存占用
- 手把手教你用python编程写一款自己的音乐下载器
- Python爬虫入门第一课:如何解析网页
- 刷爆全网的动态条形图,只需5行Python代码就能实现
- 让你的输出变得更帅,Python炫酷的颜色输出与进度条打印
- 斐波那契数列:python实现和可视化
- Python 3.9 正式发布!一图秒懂新特性