网站建设收费明细,绍兴seo外包,WordPress全屏轮播图,wordpress公告插件文章目录 1 前言2 先上成果3 车道线4 问题抽象(建立模型)5 帧掩码(Frame Mask)6 车道检测的图像预处理7 图像阈值化8 霍夫线变换9 实现车道检测9.1 帧掩码创建9.2 图像预处理9.2.1 图像阈值化9.2.2 霍夫线变换 最后 1 前言
#x1f525; 优质竞赛项目系列#xff0c;今天要分… 文章目录 1 前言2 先上成果3 车道线4 问题抽象(建立模型)5 帧掩码(Frame Mask)6 车道检测的图像预处理7 图像阈值化8 霍夫线变换9 实现车道检测9.1 帧掩码创建9.2 图像预处理9.2.1 图像阈值化9.2.2 霍夫线变换 最后 1 前言 优质竞赛项目系列今天要分享的是 机器视觉 深度学习 车道线检测 - opencv
该项目较为新颖适合作为竞赛课题方向学长非常推荐
学长这里给一个题目综合评分(每项满分5分)
难度系数3分工作量3分创新点4分 更多资料, 项目分享
https://gitee.com/dancheng-senior/postgraduate
2 先上成果 3 车道线
理解车道检测的概念
那么什么是车道检测以下是百度百科对车道的定义
车道又称行车线、车行道是用在供车辆行经的道路。在一般公路和高速公路都有设置高速公路对车道使用带有法律上的规则例如行车道和超车道。 对其进行定义是很重要的因为它使我们能够继续进行车道检测概念。我们在建立一个系统时不能有任何含糊不清的地方。
正如我前面提到的车道检测是自动驾驶汽车和自动驾驶汽车的关键组成部分。这是驾驶场景理解的重要研究课题之一。一旦获得车道位置车辆就知道去哪里并避免撞上其他车道或离开道路。这样可以防止驾驶员/车辆系统偏离车道。
以下是一些随机道路图像第一行及其检测到的车道第二行
4 问题抽象(建立模型)
我们希望执行的任务是实时检测视频中的车道。我们可以通过多种方式进行车道检测。我们可以使用基于学习的方法例如在带注释的视频数据集上训练深度学习模型或者使用预训练好的模型。
然而也有更简单的方法来执行车道检测。在这里学长将向你展示如何在不使用任何深入学习模型的情况下完成此任务。
下面是将要处理的视频的一个帧
正如我们在这张图片中看到的我们有四条车道被白色的车道标线隔开。所以要检测车道我们必须检测车道两边的白色标记。这就引出了一个关键问题——我们如何检测车道标线
除了车道标线之外场景中还有许多其他对象。道路上有车辆、路侧护栏、路灯等在视频中每一帧都会有场景变化。这很好地反映了真实的驾驶情况。
因此在解决车道检测问题之前我们必须找到一种方法来忽略驾驶场景中不需要的对象。
我们现在能做的一件事就是缩小感兴趣的领域。与其使用整个帧不如只使用帧的一部分。在下面的图像中除了车道的标记之外其他所有内容都隐藏了。当车辆移动时车道标线将或多或少地落在该区域内 5 帧掩码(Frame Mask)
帧掩码只是一个NumPy数组。
当我们想对图像应用掩码时只需将图像中所需区域的像素值更改为0、255或任何其他数字。
下面给出了一个图像掩蔽的例子。图像中某个区域的像素值已设置为0 这是一种非常简单但有效的从图像中去除不需要的区域和对象的方法。
6 车道检测的图像预处理
我们将首先对输入视频中的所有帧应用掩码。
然后我们将应用图像阈值化和霍夫线变换来检测车道标线。
7 图像阈值化
在这种方法中灰度图像的像素值根据阈值被指定为表示黑白颜色的两个值之一。因此如果一个像素的值大于一个阈值它被赋予一个值否则它被赋予另一个值。 如上所示对蒙版图像应用阈值后我们只得到输出图像中的车道标线。现在我们可以通过霍夫线变换很容易地检测出这些标记。
8 霍夫线变换
霍夫线变换是一种检测任何可以用数学方法表示的形状的方法。
例如它可以检测矩形、圆、三角形或直线等形状。我们感兴趣的是检测可以表示为直线的车道标线。
在执行图像阈值化后对图像应用霍夫线变换将提供以下输出 9 实现车道检测
是时候用Python实现这个车道检测项目了我推荐使用Google Colab因为构建车道检测系统需要计算能力。
首先导入所需的库
import os
import re
import cv2
import numpy as np
from tqdm import tqdm_notebook
import matplotlib.pyplot as plt
# 获取帧的文件名
col_frames os.listdir(frames/)
col_frames.sort(keylambda f: int(re.sub(\D, , f)))# 加载帧
col_images[]
for i in tqdm_notebook(col_frames):img cv2.imread(frames/i)col_images.append(img)
# 指定一个索引
idx 457# plot frame
plt.figure(figsize(10,10))
plt.imshow(col_images[idx][:,:,0], cmap gray)
plt.show()9.1 帧掩码创建
我们感兴趣的区域是一个多边形。我们想掩盖除了这个区域以外的一切。因此我们首先必须指定多边形的坐标然后使用它来准备帧掩码 9.2 图像预处理
我们必须对视频帧执行一些图像预处理操作来检测所需的车道。预处理操作包括 图像阈值化 霍夫线变换
9.2.1 图像阈值化 9.2.2 霍夫线变换
lines cv2.HoughLinesP(thresh, 1, np.pi/180, 30, maxLineGap200)# 创建原始帧的副本
dmy col_images[idx][:,:,0].copy()# 霍夫线
for line in lines:x1, y1, x2, y2 line[0]cv2.line(dmy, (x1, y1), (x2, y2), (255, 0, 0), 3)# 画出帧
plt.figure(figsize(10,10))
plt.imshow(dmy, cmap gray)
plt.show()最后 更多资料, 项目分享
https://gitee.com/dancheng-senior/postgraduate