基于opencv的车道线检测代码
时间: 2023-09-05 17:09:15 浏览: 97
基于OpenCv的车道线检测
以下是一个基于 OpenCV 的简单车道线检测代码示例:
```python
import cv2
import numpy as np
def region_of_interest(img, vertices):
mask = np.zeros_like(img)
cv2.fillPoly(mask, vertices, 255)
masked_img = cv2.bitwise_and(img, mask)
return masked_img
def draw_lines(img, lines, color=(0, 255, 0), thickness=3):
for line in lines:
for x1, y1, x2, y2 in line:
cv2.line(img, (x1, y1), (x2, y2), color, thickness)
def lane_detection(img):
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray_img, 50, 150)
height, width = edges.shape
vertices = np.array([[(0, height), (width/2, height/2), (width, height)]], dtype=np.int32)
masked_edges = region_of_interest(edges, vertices)
lines = cv2.HoughLinesP(masked_edges, rho=1, theta=np.pi/180, threshold=20, minLineLength=20, maxLineGap=300)
line_img = np.zeros_like(img)
draw_lines(line_img, lines)
lane_img = cv2.addWeighted(img, 0.8, line_img, 1, 0)
return lane_img
# 读取视频文件
cap = cv2.VideoCapture('path/to/video')
while(cap.isOpened()):
ret, frame = cap.read()
if ret == True:
lane_frame = lane_detection(frame)
cv2.imshow('Lane Detection', lane_frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
cv2.destroyAllWindows()
```
此代码使用 OpenCV 进行车道线检测。它的主要步骤包括:
1. 将图像转换为灰度图像。
2. 使用 Canny 边缘检测算法提取图像边缘。
3. 根据感兴趣的区域选择,过滤掉不需要的部分。
4. 使用 Hough 变换检测直线。
5. 在原始图像上绘制检测到的车道线。
6. 将车道线图像与原始图像进行融合显示。
你可以将此代码保存为 Python 文件并替换 `path/to/video` 为你的视频文件路径,然后运行代码来进行车道线检测。请注意,这只是一个简单的示例,实际应用中可能需要进行更多的图像处理和参数调整。
阅读全文