对于所有想知道如何在一篇文章中涵盖这一概念的人,我想说,在你深入探索之前,事情听起来很复杂。我不会说这篇文章非常简单,但是它的确是建立在非常基础的计算机视觉概念之上的。
先决条件是什么?具备一些基本的OpenCV知识会很好。如果没有,请不要担心,我将尝试解释我将使用的OpenCV函数,并为你提供参考,以更详细地检查它们。
本文的每一节将介绍一个最终将在程序的主要部分中使用的函数。此外,在本文中,我将使用图像演示所有内容。你可以重用相同的代码来使用视频(因为视频只是图像的集合)。
步骤1:边缘检测
我们将使用Canny边缘检测。如果你不确定这是什么,看看我之前的文章,它以实用的方式解释了这一点。
https://medium.com/analytics-vidhya/image-simplification-through-binarization-in-opencv-1292d91cae12
def canyEdgeDetector(image):
edged = cv2.Canny(image, 50, 150)
return edged
这是我们应用Canny边缘检测后的输出结果
检测Canny边缘后输出
步骤2:定义ROI(感兴趣区域)
驾驶时,为了让汽车保持在车道上,你只关注当前道路的下一个100米。而且,你也不关心护栏另一边的路。这就是我们感兴趣的区域。我们从图像中隐藏不必要的细节,只显示能帮助我们找到车道的区域。
红色的三角形表示我们感兴趣的区域
def getROI(image):
height = image.shape[0]
width = image.shape[1]
# Defining Triangular ROI: The values will change as per your camera mounts
triangle = np.array([[(100, height), (width, height), (width-500, int(hei