【问题标题】:OpenCV Hough Lines Not ShowingOpenCV霍夫线不显示
【发布时间】:2017-07-17 17:20:55
【问题描述】:

我正在尝试从下图中获取线条: original

我的代码使用以下函数:

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

其中minLineLength = 20,maxLineGap = 10。我得到以下信息: after hough lines

为什么在这种情况下水平线没有出现,尽管肉眼可以清楚地看到?

【问题讨论】:

  • 我不确定,但在原始图像中我看不到任何“清晰可见”的线条......你的意思是没有阈值的图像吗?我相信您上传了错误的图片,请编辑以便我们提供更好的帮助。这可能是因为他们没有您指定的minLineLength,也许较低的值会检测到他们。
  • 这是正确的图像。矩形的上边缘不应该注册为水平霍夫线吗?
  • 以像素为单位的 rho 分辨率太小。尝试 1 而不是 0.1。使用较小的值的风险是您没有在累加器的任何 bin 中累积足够的像素以达到您设置为 10 的阈值。对于像您这样的图像,使用这个 0.1 没有意义。
  • @Eskapp 评论很重要。 rho 参数以像素为单位进行测量,因此给它部分像素(有些不切实际)可能会产生意想不到的结果。根据我的建议发布了答案,还包括了 rho 考虑。

标签: python opencv computer-vision


【解决方案1】:

问题在于您用于 rho 的分辨率。

0.1 的分辨率非常小。实际上,对于大小为(N, N) 像素的图像,rho 的可能值的数量是N * N * sqrt(2) / rho_resolution(有时是该值的两倍,具体取决于角度的定义方式)。

可能值的数量在霍夫累加器中具体化为箱。这个数字越大,图像的不同像素将累积的相同 bin 越少。如果 rho 的分辨率值非常小,您最终会得到一个稀疏的累加器,这里和那里都有一些低值。

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

【讨论】:

    【解决方案2】:

    如果HoughLinesP()没有检测到某条线,即使它清晰可见,那是因为该线肯定不符合您的某些标准。很可能是您的minLineLengthmaxLineGap。如果您降低这些标准,您将开始检测更多行。

    此外,正如一些 cmets 所指出的,您的 rho 参数可能太小 (0.1)。由于该参数以 像素 为单位,给它一个非整数值可能会产生意想不到的结果,请尝试给它一个值 1。

    如果您愿意,可以查看文档中的 example,他们解释并展示了如何同时使用 HoughLines()HoughLinesP()

    【讨论】:

      猜你喜欢
      • 2015-02-16
      • 2012-07-06
      • 2011-12-17
      • 2020-05-23
      • 2016-02-06
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多