实验三 车道线检测 从带有车道线的图像(图2)中检测出车道线,并将检测算法通过摄像头采集实现实时的车道线检测。检测算法包括(但不限)以下步骤: 1)读入图像; 2)灰度变换; 3)去噪; 4)边缘检测; 5)线检测(直线/曲线); 视频采集及实时检测
时间: 2024-02-01 20:12:27 浏览: 108
以下是Python实现车道线检测的示例代码:
```python
import cv2
import numpy as np
# 读入视频文件
cap = cv2.VideoCapture("test_video.mp4")
# 设置输出视频文件的编码器和帧率
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter("output_video.avi", fourcc, 25.0, (640, 480))
while True:
# 读取每一帧图像
ret, frame = cap.read()
if ret:
# 将图像转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 对灰度图像进行高斯滤波
blur = cv2.GaussianBlur(gray, (5, 5), 0)
# 进行Canny边缘检测
edges = cv2.Canny(blur, 50, 150)
# 设置ROI区域,遮挡除车道线外的其他区域
mask = np.zeros_like(edges)
height, width = edges.shape
vertices = np.array([[(0, height), (width/2, height/2), (width, height)]], dtype=np.int32)
cv2.fillPoly(mask, vertices, 255)
masked_edges = cv2.bitwise_and(edges, mask)
# 进行霍夫变换检测直线
lines = cv2.HoughLinesP(masked_edges, rho=2, theta=np.pi/180, threshold=50, minLineLength=50, maxLineGap=100)
# 绘制检测到的直线
for line in lines:
x1, y1, x2, y2 = line[0]
cv2.line(frame, (x1, y1), (x2, y2), (0, 0, 255), 2)
# 输出检测结果
out.write(frame)
cv2.imshow("Lane Detection", frame)
# 按下q键退出程序
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()
```
这个示例代码实现了从视频文件中读入图像,并实时进行车道线检测。具体步骤包括:将图像转换为灰度图像、进行高斯滤波、进行Canny边缘检测、设置ROI区域、进行霍夫变换检测直线、绘制检测到的直线等。你可以根据自己的需求对代码进行修改和优化。
阅读全文