Hen*_*hen 3 c++ opencv lines hough-transform
我有一个关于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的规律性是什么?
非常感谢 !
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.
这是我的理解。我认为你的控制台应该显示的角度是橙色的(大约-0.72 rad)。但似乎 OpenCV 对所有与你的线平行的线都使用正角。我的意思是你的控制台显示的紫色角度(大约 2.5 rad)。所以你的线有这个 theta 和 rho(到线的距离)是负值。这是因为您的线位于原点的右侧。(我用Paint画的,如果不漂亮请见谅)
归档时间: |
|
查看次数: |
2041 次 |
最近记录: |