我有一个关于 HoughLines 的 opencv 库的问题。以下格式来自官网:
C++: void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0 )
以及lines的输出数组参数的解释,它说:
lines – 线的输出 vector 。每条线由一个二元 vector 表示:rho 和 theta。垂直线的 theta 为 0,水平线的 pi/2(辐射率)。
请问theta的原理是什么?看起来theta在0~1.57之间(因为pi/2是1.57),但是我运行代码发现theta可以超过1.57变成一些奇怪的值,如下图,红线是检测到的HoughLines 的行,sita 是参数行中的值? .
谁能告诉我线输出的theta有什么规律性?
非常感谢!
最佳答案
OpenCV 的文档、这个问题的另一个答案和维基百科(在撰写这个答案时)是错误的。这是我一生中第一次在维基百科中发现技术错误。
cv2.HoughLines 为您提供映射到线的对 (r, theta)。 Theta 是(图像的)x 轴和直线之间的逆时针角度。它介于零和 pi 之间。 Rho 是从图像左上角到直线的“距离”。正如 OP 指出的那样,rho 通常为负,因此距离不合适。以下是 OpenCV 作者的意思:
如果 theta < pi/2,我们谈论的是一条从图像左下角到右上角的直线。在这种情况下,它不能穿过 0 以下的 x 轴,并且我们确切地知道要绘制的线(给定 rho)。到目前为止,OpenCV 文档是正确的。
如果 theta > pi/2,那么我们需要消除与原点等距的两条平行线之间的歧义。为了解决这个问题,HoughLines 的作者制定了一个规则:如果 theta > pi/2,则通过图像左侧的线具有正 rho,而通过图像顶部的线具有负 rho。
关于c++ - Opencv HoughLines 线西塔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36052757/