【问题标题】:Hough transform detect shorter lines霍夫变换检测较短的线
【发布时间】:2015-05-30 04:01:37
【问题描述】:

我正在使用 opencv 霍夫变换来尝试检测形状。使用 HoughLines 方法可以很好地检测到较长的线条。但较短的线条会被完全忽略。 有什么方法也可以检测到较短的行吗?

我正在使用的代码在此页面上进行了描述 http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_imgproc/py_houghlines/py_houghlines.html

我对房子的角落等线条更感兴趣。 我应该修改哪个参数来使用霍夫变换来做到这一点?或者我应该看看不同的算法

【问题讨论】:

  • 你试过HoughLinesP()参数minLineLength吗?

标签: python opencv computer-vision hough-transform straight-line-detection


【解决方案1】:

在您提供的链接上查看HoughLinesP

import cv2
import numpy as np

img = cv2.imread('beach.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
minLineLength = 100
maxLineGap = 5
lines = cv2.HoughLinesP(edges, 1, np.pi/180, 50, minLineLength, maxLineGap)
for x1, y1, x2, y2 in lines[0]:
    cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.imwrite('canny5.jpg', edges)
cv2.imwrite('houghlines5.jpg', img)

同时查看 Canny 生成的边缘图像。您应该只能找到边缘图像中存在线条的线条。

这是覆盖在图像上的线检测输出:

使用变量minLineLengthmaxLineGap 以获得更理想的输出。这种方法也不会像 HoughLines 那样给你长线,但看看 Canny 图像,也许这些长线一开始就不是可取的。

【讨论】:

  • 感谢您的提示,您能否提供您在图像中用作这两个参数的值?
  • @Pita 您在我发布的代码中看到的值是生成上面图像的值。回想一下,这只是绿线,因为我没有原始图像。
  • 请注意,您的参数并不是您认为的那样。尝试将 minLineLength 和 maxLineGap 作为命名参数传递来查看。您可以在文档中看到,阈值之后的参数是行,因此 minLineLength 作为行工作(什么都不做),而 maxLineGap 作为 minLineLength 工作(实际上,增加 maxLineGap 返回相同的行,过滤掉较小的行)。跨度>
猜你喜欢
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
相关资源
最近更新 更多