车道线检测代码 opencv
时间: 2024-05-26 11:09:20 浏览: 201
车道线检测是自动驾驶领域中的一项重要技术。OpenCV是一个开源的计算机视觉库,提供了许多方便的函数和工具,可以用于车道线检测。下面是一个简单的车道线检测代码示例:
```
import cv2
import numpy as np
# 读取图像
img = cv2.imread('test_image.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
# 高斯滤波
kernel_size = 5
blur_gray = cv2.GaussianBlur(gray,(kernel_size, kernel_size),0)
# Canny边缘检测
low_threshold = 50
high_threshold = 150
edges = cv2.Canny(blur_gray, low_threshold, high_threshold)
# 定义感兴趣区域
mask = np.zeros_like(edges)
ignore_mask_color = 255
imshape = img.shape
vertices = np.array([[(0,imshape),(450, 320), (490, 320), (imshape,imshape)]], dtype=np.int32)
cv2.fillPoly(mask, vertices, ignore_mask_color)
masked_edges = cv2.bitwise_and(edges, mask)
# Hough变换直线检测
rho = 1 # 精度,单位像素
theta = np.pi/180 # 角度精度,单位弧度
threshold = 20 # 最小投票数,即检测到直线的最小数量
min_line_length = 20 # 最小线段长度,短于此值的线段将被忽略
max_line_gap = 300 # 最大线段间隙,同一直线上两点之间的最大距离
line_image = np.copy(img)*0 # 创建一个空图像,用于绘制检测到的直线
lines = cv2.HoughLinesP(masked_edges, rho, theta, threshold, np.array([]), min_line_length, max_line_gap)
for line in lines:
for x1,y1,x2,y2 in line:
cv2.line(line_image,(x1,y1),(x2,y2),(255,0,0),10)
# 合并原图像和直线图像
color_edges = np.dstack((edges, edges, edges))
combo = cv2.addWeighted(img, 0.8, line_image, 1, 0)
# 显示结果
cv2.imshow('result', combo)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码主要是通过Canny边缘检测、Hough变换直线检测等步骤来实现车道线的检测。具体步骤包括:
1. 读取图像并转换为灰度图像;
2. 进行高斯滤波;
3. 进行Canny边缘检测;
4. 定义感兴趣区域,排除不相关的区域;
5. 进行Hough变换直线检测;
6. 绘制检测到的直线并与原图像合并;
7. 显示结果。
这里只是一个简单的例子,实际应用中还需要进行一系列优化和改进。如有需要,请参考OpenCV官方文档或其他相关资料。
阅读全文