【问题标题】:why hough transform detects two lines while there is only one line为什么霍夫变换检测到两条线而只有一条线
【发布时间】:2015-06-30 14:06:26
【问题描述】:

我想检测一条线并提取它的两个端点。常用的方法是使用霍夫变换。幸运的是,OpenCV 中有一个sample 与物质有关,因此我画了一条线,其两个端点为p1(100,200), p2(400,200)。我认为上述方法只会为我提供这些要点。我的示例图片是

霍夫变换为我提供了两个图像

对于 Canny 过滤器,

在代码中,似乎检测到了两行。这解释了为什么红线较粗,这表明有两条线而不是一条。当我打印出行数时,它显示如下两个

lines.size(): 2
p1:<99,201>  p2:<401,201>
lines.size(): 2
p1:<102,198>  p2:<398,198>

为什么我得到两条线?

【问题讨论】:

  • 取决于 HoughSpace 中 bin 的宽度,并非所有像素都可能分配给线条。尝试更宽/更少的垃圾箱。
  • 你在 houghLines 之前使用 canny 边缘检测吗?您应该检查该中间图像的外观。渐变可能会在粗线的每一侧产生一个边缘。
  • @Micka,是的,样本实际上使用了精明算法。
  • 你能贴出中间精明的图片吗?
  • @Micka,我已经在我的帖子中链接了整个代码。对于精明,Mat dst, cdst; Canny(src, dst, 50, 200, 3); cvtColor(dst, cdst, CV_GRAY2BGR);

标签: c++ opencv image-processing line


【解决方案1】:

这可能是由于您的 HoughSpace 中的垃圾箱的宽度。 您可能会选择默认的 OpenCv 函数之一,即

HoughLines(X, X, 1, CV_PI/180, X, X, X );

不是 X 的参数定义了 bin see 的宽度。 上面写着:

rho : The resolution of the parameter r in pixels. We use 1 pixel.

对于第一个参数和第二个参数:

theta: The resolution of the parameter \theta in radians. We use 1 degree (CV_PI/180)

我现在没有你选择的值,但你可能想选择更大的值。

【讨论】:

  • 我试图改变一个参数但没有运气。
猜你喜欢
  • 2011-09-25
  • 1970-01-01
  • 2019-10-11
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多