为什么hough变换检测到两条线,而只有一条线

时间:2015-06-13 10:32:34

标签: c++ opencv image-processing line

我想检测一条线并提取其两个终点。常见的方法是使用霍夫变换。幸运的是,OpenCV中有sample关于问题,因此我绘制了一条两条终点p1(100,200), p2(400,200)的线。我认为前面提到的方法只会给我提供这些要点。我的样本图片是

enter image description here

霍夫变换为我提供了两张

的图像

enter image description here

enter image description here

对于Canny过滤器,

enter image description here

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

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

为什么我要两条线?

1 个答案:

答案 0 :(得分:1)

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

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

非X的参数定义了分档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)

我现在不是您选择的值,但您可能想要选择更大的值。