利用霍夫变换进行车道线检测

读取图像或视频帧

下面,有 3 个加载图像的示例。稍后,在每个步骤之后,将显示这些样本图像的中间结果。第三张图像对处理要求最高,因为黄线和道路之间的阴影和对比度非常小。

在这里插入图片描述

过滤白色和黄色

对于前两个更简单的图像,此步骤不是必需的。然而,在第三个示例中,直接进行下一步(灰度转换)会为黄色车道和明亮的道路产生非常相似的灰色。我们想以某种方式区分这两个对象。因此,初始过滤作为道路车道主要组成部分的 2 个关键颜色的想法。首先,将图像转换为HSL 颜色空间。HSL(色相、饱和度、亮度)色彩空间概念是基于人类视觉的色彩感知。这就是为什么即使图像上有阴影,也比在 RGB 空间中更容易区分所需颜色(黄色和白色)。

为了提取白色,我只过滤了 HSL 颜色空间的“L”分量中的高亮度。对于黄色通道,我选择色调等于或多或少 30 以选择黄色,并且 Ii 过滤饱和度非常高。下面是经过这种过滤的测试图像。

### 使用霍夫变换进行车道线检测 霍夫变换是一种用于从图像中提取几何形状的技术,特别适用于识别直线和其他简单图形。在车道线检测的应用场景下,可以通过霍夫变换来定位道路中的白色或黄色线条。 以下是完整的实现过程以及代码示例: #### 1. 图像预处理 为了提高霍夫变换的效果,通常需要对输入图像进行一系列预处理操作,包括灰度化、高斯模糊和Canny边缘检测[^3]。 ```python import cv2 import numpy as np # 加载图像并转换为灰度图 image = cv2.imread('lane_image.jpg') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 应用高斯模糊以减少噪声 blurred = cv2.GaussianBlur(gray, (5, 5), 0) # Canny 边缘检测 edges = cv2.Canny(blurred, 50, 150) ``` #### 2. 定义感兴趣区域(ROI) 由于车道线主要位于图像的下半部分,因此可以裁剪掉不必要的区域以加速计算[^4]。 ```python height, width = edges.shape[:2] # 创建掩码 mask = np.zeros_like(edges) vertices = np.array([[(0, height), (width//2, height*3//5), (width-width//2, height*3//5), (width, height)]], dtype=np.int32) cv2.fillPoly(mask, vertices, 255) # 只保留感兴趣区域内的边缘 masked_edges = cv2.bitwise_and(edges, mask) ``` #### 3. 霍夫变换检测直线 使用 `cv2.HoughLinesP` 函数执行概率霍夫变换,该函数返回一组短直线段[^1]。 ```python lines = cv2.HoughLinesP(masked_edges, rho=1, theta=np.pi/180, threshold=15, minLineLength=40, maxLineGap=20) ``` #### 4. 绘制检测到的车道线检测到的直线绘制回原图上以便可视化结果[^2]。 ```python line_image = np.copy(image) * 0 # 创建空白图像用于绘线 if lines is not None: for line in lines: x1, y1, x2, y2 = line[0] cv2.line(line_image, (x1, y1), (x2, y2), (255, 0, 0), 5) # 将线条叠加到原始图像上 result = cv2.addWeighted(image, 0.8, line_image, 1, 0) cv2.imshow("Lane Detection", result) cv2.waitKey(0) cv2.destroyAllWindows() ``` 以上代码实现了基于霍夫变换车道线检测功能,并提供了清晰的步骤说明。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点PY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值