2015-06-13 57 views
1

我想检测一条线并提取它的两个终点。常用的方法是使用霍夫变换。幸运的是OpenCV中有一个sample,因此我画了一条线,其两个终点p1(100,200), p2(400,200)。我认为上述方法只会提供这些观点。我的样本图像是为什么hough变换检测两条线,而只有一条线

enter image description here

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

enter image description here

enter image description here

对于坎尼滤波器,

enter image description here

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

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

为什么我要两行?

+0

根据HoughSpace中的bin的智慧,并非所有的像素都可能被分配到该行。尝试更宽/更少的垃圾箱。 – MisterC

+0

你是否在houghLines之前使用Canny边缘检测?你应该检查它的外观如何。渐变可能在粗线的每一侧产生一条边。 – Micka

+0

@Micka,是的样本实际上使用canny算法。 – CroCo

回答

1

这可能是由于你的HoughSpace中箱子的宽度。 你可能选择默认的OpenCV函数的之一,没有被X定义箱see的宽度,即

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

的参数。 有它说:

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)

我不知道现在你选择的值,但你可能要选择较大的。

+0

我试图改变一个参数,但没有运气。 – CroCo