使用 OpenCV 对车道进行实时检测
发布日期:2021-05-06 23:44:00 浏览次数:58 分类:精选文章

本文共 1840 字,大约阅读时间需要 6 分钟。

OpenCV车道检测:基于多边形掩码与霍夫线变换的实时标记

近年来,自动驾驶技术的快速发展催生了诸多核心算法,而车道检测作为其中关键技术之一,正逐渐从实验室走向实际应用。通过OpenCV框架,我们可以在视频流中实时检测车道并进行可视化标记,这一技术不仅为自动驾驶提供了重要支持,也为智能交通系统的优化提供了可靠的数据基础。

本文将详细介绍基于多边形掩码与霍夫线变换的车道检测方法,并通过实际代码实现展示其效果。


实现步骤概述

车道检测的实现过程可分为以下几个关键步骤:

  • 视频帧处理:将视频的每一帧分离成图片文件,并存储在专门目录中。
  • 多边形掩码创建:定义车道的形状(多边形顶点坐标),并生成对应的掩码图像。
  • 图像处理与阈值化:对每张图片应用掩码,进行图像阈值化处理,提取出车道区域。
  • 霍夫线变换:利用霍夫线变换算法检测视频帧中的直线,识别车道边界。
  • 可视化标记:将检测到的车道信息绘制到原图上,生成最终的标记效果。
  • 视频合成:将所有帧的标记结果合并,输出完整的标记视频。

  • 代码解析

    1. 导入必要库

    import os
    import re
    import cv2
    import numpy as np
    from tqdm import notebook
    import matplotlib.pyplot as plt

    2. 读取视频帧

    col_frames = os.listdir('frames/')
    col_frames.sort(key=lambda f: int(re.sub('\D', '', f)))
    col_images = []
    for i in notebook.tqdm(col_frames):
    img = cv2.imread(f'frames/{i}')
    col_images.append(img)

    3. 创建多边形掩码

    stencil = np.zeros_like(col_images[0][:, :, 0])
    polygon = np.array([[50, 270], [220, 160], [360, 160], [480, 270]])
    cv2.fillConvexPoly(stencil, polygon, 1)

    4. 定义视频输出参数

    pathOut = 'roads_v2.mp4'
    fps = 30.0
    height, width = col_images[0].shape[:2]
    size = (width, height)

    5. 合成标记视频

    out = cv2.VideoWriter(pathOut, cv2.VideoWriter_fourcc(*'DIVX'), fps, size)
    for img in notebook.tqdm(col_images):
    # 应用掩码
    masked = cv2.bitwise_and(img[:, :, 0], img[:, :, 0], mask=stencil)
    # 阈值化
    ret, thresh = cv2.threshold(masked, 130, 145, cv2.THRESH_BINARY)
    # 检测霍夫线
    lines = cv2.HoughLinesP(thresh, 1, np.pi/180, 30, maxLineGap=200)
    # 绘制标记
    dmy = img.copy()
    try:
    for line in lines:
    x1, y1, x2, y2 = line[0]
    cv2.line(dmy, (x1, y1), (x2, y2), (255, 0, 0), 3)
    out.write(dmy)
    except TypeError:
    out.write(img)
    out.release()

    结果展示与验证

    通过上述代码处理后生成的视频文件 roads_v2.mp4 中,车道区域已被实时检测并标记。检测效果可通过视频播放器查看,车道边界清晰可见,多边形掩码的区域优先处理确保了标记效果的准确性。


    本文通过多边形掩码与霍夫线变换的结合,实现了高效的车道检测与标记方法。该算法在实际应用中展现出良好的性能,适用于复杂交通场景下的车道识别任务。

    上一篇:OpenCV 之按位运算举例解析
    下一篇:用 OpenCV+TensorFlow 和 AI 玩石头剪刀布

    发表评论

    最新留言

    逛到本站,mark一下
    [***.202.152.39]2025年04月12日 23时58分05秒