2017-07-17 98 views
0

我想从下面的图像的线条: originalOpenCV的霍夫线不显示

我的代码使用以下功能:

import cv2 
lines = cv2.HoughLinesP(image, .1, np.pi/360, 10, 
         minLineLength, maxLineGap) 

其中minLineLength = 20,和maxLineGap = 10。我正在获取以下内容: after hough lines

为什么在这种情况下水平线不显示,尽管清晰可见他肉眼?

+0

我不确定,但在原始图像中,我看不到任何线条“清晰可见”...您的意思是没有阈值的图像?我相信你上传了错误的图片,请编辑,以便我们可以帮助更好。这可能是因为他们没有你指定的'minLineLength',也许值越低,它们就会检测到它们。 – DarkCygnus

+0

这是正确的图像。不应该将矩形的上边缘注册为水平线? – ajf1000

+1

像素中rho的分辨率太小。尝试1而不是0.1。如果数值较小,则风险是您无法在累加器的任何仓中累积足够的像素以达到您在10处设置的阈值。对于像您这样的图像,使用此0.1值没有意义。 – Eskapp

回答

1

问题是你用于rho的分辨率。

0.1的分辨率非常小。事实上,对于尺寸为(N, N)像素的图像,rho的可能值的数量为N * N * sqrt(2)/rho_resolution(有时是取决于如何定义角度的两倍)。

可能值的数量在Hough累加器中物化为箱。此数字越大,图像的不同像素积聚的区域就越小。由于rho的分辨率非常小,因此最终会得到一个稀疏的累加器,在这里和那里有一些较低的值。

将此值提高到1或2像素的分辨率,您应该看到更多重要线条出现。

0

如果HoughLinesP()不是检测到某一行,即使它清晰可见,也是因为该行肯定不符合您的某些条件。最有可能的是你的minLineLengthmaxLineGap。如果您减少这些标准,您将开始检测更多线条。

另外,如某些注释所示,您的rho参数可能太小(0.1)。作为该参数在像素测量,给它一个非整数值可能会产生意想不到的效果,尝试给它的1

的值。如果你愿意,你可以看看这个example从文档,他们解释并展示如何使用HoughLines()HoughLinesP()