C++ Opencv HoughLinesθ?

C++ Opencv HoughLinesθ?,c++,opencv,lines,hough-transform,C++,Opencv,Lines,Hough Transform,我有一个关于HoughLines的opencv图书馆的问题。以下格式来自官方网站: C++:void HoughLines(输入阵列图像、输出阵列线、双菱形、双θ、整数阈值、双srn=0、双stn=0) 以及线的输出数组参数的说明,它表示: lines–线的输出向量。每条线由两个元素向量表示:ρ和θ。垂直线的θ为0,水平线的θ为pi/2(辐射度) 我想知道θ的原理是什么?看起来θ在0~1.57的范围内(因为pi/2是1.57),但我运行代码发现θ可以超过1.57,变成一些奇怪的值,如下图所示,红

我有一个关于HoughLines的opencv图书馆的问题。以下格式来自官方网站:

C++:void HoughLines(输入阵列图像、输出阵列线、双菱形、双θ、整数阈值、双srn=0、双stn=0)

以及线的输出数组参数的说明,它表示:

lines–线的输出向量。每条线由两个元素向量表示:ρ和θ。垂直线的θ为0,水平线的θ为pi/2(辐射度)

我想知道θ的原理是什么?看起来θ在0~1.57的范围内(因为pi/2是1.57),但我运行代码发现θ可以超过1.57,变成一些奇怪的值,如下图所示,红线是由HoughLines检测到的线,而sita是参数行中的值?

有人能告诉我线输出θ的规律性吗


非常感谢

这就是我所理解的。我认为你的控制台应该显示的角度是橙色的(大约-0.72 rad)。但OpenCV似乎对所有平行线使用正角度。我的意思是紫色的角度,这是你的控制台显示(约2.5拉德)。所以你的直线有θ,ρ(到直线的距离)是负值。这是因为您的线位于原点的右侧。(我是用油漆画的,不好看的话我很抱歉)


OpenCV的文档、这个问题的另一个答案以及维基百科(在撰写此答案时)都是错误的。这是我有生以来第一次在维基百科上发现技术错误

HoughLines为您提供映射到直线的对(r,θ)。θ是(图像的)x轴与直线之间的逆时针角。它在零和π之间。Rho是图像左上角到直线的“距离”。正如OP所指出的,rho通常为负值,因此不是一个合适的距离。以下是OpenCV的作者的意思:

如果θ
如果θ>π/2,那么我们需要在距离原点等距离的两条平行线之间消除歧义。为了解决这个问题,HoughLines的作者制定了一条规则:如果θ>π/2,则穿过图像左侧的线具有正ρ,穿过图像顶部的线具有负ρ。ρ是所有传入ρ的“桶”或累加器数组的大小,或与原点的距离。图像中可能的最长距离是从左上角到右下角,因此为了获得最大精度,请将该值插入houghlines rho。
θ是所有传入θ的桶的大小。要获得最大精度,您需要180的值。要仅检测偶数角度,θ应为90。要仅检测可被30整除的角度,θ应为6

角度似乎正确,从X轴逆时针或从Y轴顺时针计数。因此,您的意思是相反的线可能具有相同的θ?θ不受间隔[0,PI/2]的限制,它只指示角度测量的方向。正如@AlexanderEkzhanov所说的,角度是从x轴开始逆时针测量的,这为垂直线提供了PI/2的值。这并不意味着θ不能超过这个值。x轴表示图像的顶部,对吗?“或者是卡地辛坐标的x轴?所以opencv线似乎不能正确地判断线的方向?我不确定所有opencv线的方向,@HenryChen。”。在这种特殊情况下,θ并不表示线的角度。它显示的是x轴和垂直于顺时针方向直线的夹角。那么你的意思是我的控制台显示的是紫色的,无论ρ和θ是紫色的?我不明白你的意思抱歉,但为什么不显示橙色的呢?橙色的角度不是也是正的吗?@HenryChen,不,橙色的角度是负的,因为它与x轴成逆时针方向。这就是OpenCV使用平行线的原因,平行线位于原点的左侧,并在顺时针方向提供正角度。使用紫色角度是可以的,因为您的线的位置将由负的rho值调整(这意味着您的线将位于右侧)。这对你有意义吗?对不起,你所说的“正如OP所指出的”是什么意思?什么是OP?对不起,如果我的问题听起来太愚蠢了。