学习目标
- 了解在视频中检测车道线的方法
在前面几节中一步步完成摄像机标定、图像畸变校正、透视变换、提取车道线、检测车道线、计算曲率和偏离距离后,在图像上实现了复杂环境下的车道线检测算法。现在我们将视频转化为图片,然后一帧帧地对视频数据进行处理,然后将车道线检测结果存为另一段视频,代码如下:
首先将前面的方法进行汇总:
def process_image(img): # 1.图像去畸变 undistort_img = img_undistort(img, mtx, dist) # 2.车道线检测 rigin_pipline_img = pipeline(undistort_img) # 3.透视变换 transform_img = img_perspect_transform(rigin_pipline_img, M) # 4.精确定位车道线,并拟合 left_fit, right_fit = cal_line_param(transform_img) # 5.绘制车道区域 result = fill_lane_poly(transform_img, left_fit, right_fit) # 6.反投影 transform_img_inverse = img_perspect_transform(result, M_inverse) # 7.计算曲率半径和偏离中心的距离 transform_img_inverse = cal_radius(transform_img_inverse, left_fit, right_fit) transform_img_inverse = cal_center_departure(transform_img_inverse, left_fit, right_fit) # 8. 将检测结果与原始图像叠加 transform_img_inverse = cv2.addWeighted(undistort_img, 1, transform_img_inverse, 0.5, 0) return transform_img_inverse
接下来,读取视频并调用上述方法:
clip1 = VideoFileClip("project_video.mp4") white_clip = clip1.fl_image(process_image) white_clip.write_videofile("output.mp4", audio=False)
处理结果如下所示:
总结:
视频中的处理将之前的处理步骤进行综合,完成车道线的检测。
