Opencv 为什么在Canny边缘检测后不能画线?

Opencv 为什么在Canny边缘检测后不能画线?,opencv,edge-detection,hough-transform,imagefilter,canny-operator,Opencv,Edge Detection,Hough Transform,Imagefilter,Canny Operator,事实上,我不擅长计算机视觉。先说声对不起 我想检测电车车道的边缘。大多数情况下,代码运行良好,但有时甚至无法划清界限。我不知道为什么 裁剪的\u图像功能只是裁剪当前帧的多边形区域 显示线功能绘制角度绝对值在30到90之间的线。它使用cv2.line来绘制线条 代码如下: _,frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY) # convert image to gray to be one layer blur

事实上,我不擅长计算机视觉。先说声对不起

我想检测电车车道的边缘。大多数情况下,代码运行良好,但有时甚至无法划清界限。我不知道为什么

裁剪的\u图像功能只是裁剪当前帧的多边形区域

显示线功能绘制角度绝对值在30到90之间的线。它使用cv2.line来绘制线条

代码如下:

_,frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)  # convert image to gray to be one layer
blur = cv2.GaussianBlur(gray, (1, 1), 0)  # to reduce noise in gray scale image
canny = cv2.Canny(blur, 150, 200, apertureSize=3)
cropped_image = region_of_interest(canny) # simply, it crops bottom  of image 
lines = cv2.HoughLinesP(cropped_image, 1, np.pi / 180, 100, np.array([]), 
minLineLength=5, maxLineGap=5)

hough_bundler = HoughBundler()
lines_merged = hough_bundler.process_lines(lines, cropped_image)
line_image = display_lines(frame, lines_merged)
combo_image = cv2.addWeighted(frame, 0.8, line_image, 1, 1)
cv2.imshow(‘test’, combo_image)
要查看它:

预期:

精明的:


结果:

首先,我将首先修复cv2.GuassianBlur()行。如果您使用的是1x1内核,它什么都不做,那么您至少需要使用3x3内核。如果你想知道为什么1x1滤波器不起作用,看看卷积是如何应用的。
其次,我会使用Canny光圈大小来满足我的需要。此外,在边缘检测之后,您可以将cv2.Correase()与3x3或5x5内核一起使用,这样图像中就不会出现虚线。

结果照片中的红线表示线的角度小于30。