我有一个关于HoughLines的opencv库的问题。格式如下:官方网站:
C ++:void HoughLines(InputArray image,OutputArray lines,double rho,double theta,int threshold,double srn = 0,double stn = 0)
对行的输出数组参数的解释,它说:
lines - 行的输出向量。每条线由两元素矢量表示:rho和theta。对于垂直线,theta为0,对于水平线,则为θ/ 2(辐射亮度)。
我想知道theta的原理是什么?似乎theta在0~1.57的范围内(因为pi / 2是1.57),但我运行代码并发现theta可以超过1.57并变成一些奇怪的值,如下图所示,红线是检测到的by HoughLines,sita是参数行中的值?
谁能告诉我从线输出的theta的规律性是什么?
非常感谢!
答案 0 :(得分:6)
OpenCV的文档,这个问题的另一个答案,以及维基百科(撰写此答案时)都是错误的。这是我生命中第一次在维基百科中发现技术错误。
cv2.HoughLines为您提供映射到线条的对(r,theta)。 θ是x轴(图像的)和线之间的逆时针角度。它介于零和pi之间。 Rho是从图像左上角到线的“距离”。正如OP指出的那样,rho通常是负的,因此不是适当的距离。以下是OpenCV的作者的意思:
如果theta< pi / 2,我们谈论的是从图像左下角到右上角的一条线。在这种情况下,它不能越过0以下的x轴,我们确切地知道要绘制的线(给定rho)。到目前为止,OpenCV文档是正确的。
如果theta> pi / 2,然后我们需要消除与原点等距的两条平行线之间的歧义。为了解决这个问题,HoughLines的作者制定了一条规则:如果theta> pi / 2,穿过图像左侧的线条具有正rho,穿过图像顶部的线条具有负rho。
答案 1 :(得分:1)
这就是我的理解。我认为你的控制台应该显示的角度是橙色(约-0.72弧度)。但似乎OpenCV对你的线路的所有平行线使用正角度。我的意思是紫色角度,这是你的控制台显示(约2.5弧度)。所以你的线有这个theta和rho(距离线)是负值。这是因为你的线位于原点的右侧。 (我在Paint中绘制图片,对不起,如果它不漂亮)
答案 2 :(得分:0)
Rho是'桶的大小。或所有传入的rho或距离原点的距离的累加器数组。图像中最长的距离是从左上角到右下角,因此为了获得最大精度,请将该值插入到houghlines rho中。 Theta是所有传入theta的桶的大小。为获得最大精度,您需要180的值。要仅检测偶数角度,θ应为90.仅检测可被30整除的角度,θ应为6