OpenCV 车道检测

OpenCV 车道检测

前言

如果要检测道路图像中的车道,方法之一是利用深度学习的语义分割技术。而在 OpenCV 中解决此问题可以使用边缘检测器。在本节中,我们将了解如何使用边缘检测和直线检测识别道路图像中的车道。

模型分析

使用 OpenCV 检测图像中道路边缘的策略如下:

  1. 检测图像中的对象边缘
  2. 识别遵循直线且连接的边缘
  3. 从图像的一端延伸识别出的直线至另一端

车道检测

(1) 导入库并查看示例图像:

python 复制代码
import cv2, numpy as np
import matplotlib.pyplot as plt,cv2

IMG = cv2.imread('3.jpeg')
img = np.uint8(IMG.copy())

图像中包含许多信息,但本节中我们只需要检测直线。使用 Canny 边缘检测器可以获取图像边缘,当颜色发生剧烈变化时,Canny 检测器会将其识别为边缘,颜色变化在数学上取决于图像内像素的梯度。两个像素的差异越大,像素表示物体边缘的可能性就越高。

(2) 使用 cv2.Canny 边缘检测器获取图像中的边缘:

python 复制代码
img = cv2.blur(img, (5,5))
edges = cv2.Canny(img,150,200)
plt.imshow(edges, cmap='gray')
plt.show()

在以上代码中,首先使用 cv2.blur 对原始图像进行模糊处理,以 5 x 5 的窗口为单位,计算窗口内像素值的平均值,并将中心元素替换为周围像素的像素值的平均值。使用 cv2.Canny 方法计算边缘时,值 150200 分别表示边缘所对应的最小和最大可能梯度值。如果一个像素两侧的像素差值较大,则该像素会被识别为边缘。原始图像和模糊图像的边缘如下所示:

从上图中可以看出,对原始图像进行模糊处理后,边缘会更加清晰合理。识别出边缘后,我们介绍如何使用 HoughLines 技术从图像中提取直线。

(3) 使用 cv2.HoughLines 函数识别长度至少为 100 像素的直线:

python 复制代码
lines = cv2.HoughLines(edges,1,np.pi/180,150)

其中,参数值 100 指定识别直线的长度应至少为 100 像素。得到的每条线都包括与图像左下角的距离和相应的角度,通常用极坐标中的 [rho, theta] 表示。

(4) 绘制检测出的直线:

python 复制代码
lines = lines[:,0,:]
for rho,theta in lines:
    a = np.cos(theta)
    b = np.sin(theta)
    x0 = a*rho
    y0 = b*rho
    x1 = int(x0 + 10000*(-b))
    y1 = int(y0 + 10000*(a))
    x2 = int(x0 - 10000*(-b))
    y2 = int(y0 - 10000*(a))
    cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2)

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

plt.imshow(img)
plt.show()

本节中,我们首先通过执行模糊和边缘检测从图像中滤除噪声,得到候选车道像素。然后,使用 HoughLines 进一步过滤掉小于 100 个像素的直线候选。

相关链接

OpenCV简介与图像处理基础
详解 OpenCV 轮廓检测
OpenCV轮廓检测相关应用
语义分割详解

相关推荐
AiTEN_Robotics20 分钟前
AMR机器人:如何满足现代物料搬运的需求
人工智能·机器人·自动化
产品人卫朋23 分钟前
卫朋:IPD流程落地 - 市场地图拆解篇
大数据·人工智能·物联网
沛沛老爹43 分钟前
跨平台Agent Skills开发:适配器模式赋能提示词优化与多AI应用无缝集成
人工智能·agent·适配器模式·rag·企业转型·skills
zhangshuang-peta1 小时前
适用于MCP的Nginx类代理:为何AI工具集成需要网关层
人工智能·ai agent·mcp·peta
Network_Engineer1 小时前
从零手写RNN&BiRNN:从原理到双向实现
人工智能·rnn·深度学习·神经网络
想进部的张同学1 小时前
week1-day5-CNN卷积补充感受野-CUDA 一、CUDA 编程模型基础 1.1 CPU vs GPU 架构线程索引与向量乘法
人工智能·神经网络·cnn
睡醒了叭1 小时前
目标检测-深度学习-SSD模型项目
人工智能·深度学习·目标检测
冰西瓜6001 小时前
从项目入手机器学习(五)—— 机器学习尝试
人工智能·深度学习·机器学习
Coding茶水间1 小时前
基于深度学习的狗品种检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
开发语言·人工智能·深度学习·yolo·目标检测·机器学习
InterestOriented1 小时前
中老年线上学习发展:兴趣岛“内容+服务+空间”融合赋能下的体验升级
人工智能·学习