Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 道路车道检测程序未能正确检测车道_Python_Opencv_Image Processing_Computer Vision_Hough Transform - Fatal编程技术网

Python 道路车道检测程序未能正确检测车道

Python 道路车道检测程序未能正确检测车道,python,opencv,image-processing,computer-vision,hough-transform,Python,Opencv,Image Processing,Computer Vision,Hough Transform,我正在尝试开发一个程序,可以检测道路上的车道。我已经试验了Hough线变换和概率Hough线变换。然而,这些都没有得到我想要的结果 原始图像: 霍夫线变换 概率Hough线变换 似乎对于Hough线变换,我至少可以检测到整个车道,但不幸的是,这条线无限延伸(直到它们离开图片),一直延伸到两条线相交的点,这不是一个好的图形车道检测标记 我还尝试了概率Hough线变换,用于车道检测的绿线与另一条绿线不同,但它无法标记和检测整个车道 我试图在这里复制结果(用Python编写) 我能做些什么

我正在尝试开发一个程序,可以检测道路上的车道。我已经试验了Hough线变换和概率Hough线变换。然而,这些都没有得到我想要的结果

原始图像:

霍夫线变换

概率Hough线变换

似乎对于Hough线变换,我至少可以检测到整个车道,但不幸的是,这条线无限延伸(直到它们离开图片),一直延伸到两条线相交的点,这不是一个好的图形车道检测标记

我还尝试了概率Hough线变换,用于车道检测的绿线与另一条绿线不同,但它无法标记和检测整个车道

我试图在这里复制结果(用Python编写)

我能做些什么来解决这个问题

代码:


很酷的话题!首先,为什么要添加高斯模糊?你的源文章根本没有提到这一点。如果我去掉它,我会立刻得到额外的疯狂线条,我可以用canny_low和canny_high来调低这些线条。我能找到的最好的是低=100和高=180

其次,您在将文章翻译成Python方面做得相当好。然而,我认为你遗漏了一个重要的细节。作者写道:

// Canny algorithm
Mat contours;
Canny(image,contours,50,350);
Mat contoursInv;
threshold(contours,contoursInv,128,255,THRESH_BINARY_INV);
实现Canny函数(cv2.Canny()),但不调用threshold函数。根据,这个函数“对每个数组元素应用一个固定级别的阈值”

#thresh = canny(imgray) # original
edges = canny(imgray) # docs refer to return value as "edges"

retval, dst = cv2.threshold(edges, 128, 255,cv2.THRESH_BINARY_INV)
返回了两个值-retval目前对我们来说并不特别重要。dst是阈值化后图像数据的目标2D数组。然后,您将更新对cv2.HoughLines和cv2.HoughLinesP的调用,将“thresh”替换为“dst”。当我这样做时,我得到了很多更有趣的行为,尽管我无法找到正确的调整值以使这些行正常工作


希望这能给你一些建议。试试我的技巧,再多读一两遍这篇文章,仔细检查你是否拥有与作者相同的程序流程。这似乎是一个有趣的项目,玩得开心

谢谢你的提示,但我得到了这样奇怪的结果:我可能是不正确地复制了你的代码,你介意编辑你的评论以包含你使用的完整代码吗?谢谢啊,我道歉。我写的东西可能不清楚。我发布的这张图片只是我描述的“第一步”的结果当我执行“第二步”时,我还得到了大部分填充的完整图像,与您的图像类似。我不知道这是为什么。然而,我猜它是在正确的轨道上的,因为它密切关注这篇文章。我猜调整这些值(128255,canny_低,canny_高)是个问题。此外,可能还有一些我们尚未从原始文章中添加的附加代码。\ \我希望这有帮助!
#thresh = canny(imgray) # original
edges = canny(imgray) # docs refer to return value as "edges"

retval, dst = cv2.threshold(edges, 128, 255,cv2.THRESH_BINARY_INV)