在OpenCv中,线条以极坐标定义,以R和theta表示。在我的情况下,我发现了一条线和图像,旋转了图像,现在我想知道线在旋转图像中的值。在这种情况下,我围绕一个不是原点的已知点旋转。
我知道我可以通过添加旋转角度来简单地找到θ的新值,但不知道如何通过非零点旋转极线。
所以我真正问的是,如果围绕(Xr,Yr)旋转线,R的新值是多少?
我会注意到我意识到我可能只是在新图像中再次找到该行但是在找到我想要的行时涉及很多计算,所以如果有一个公式我可以用来查找新的行值那会更好。
答案 0 :(得分:1)
我可以想到一种笨拙但相当简单的方法,使用从任意点找到最接近线的点的想法。一些图表可能能够更好地解释这一点:
其中C
是旋转中心,而Q
是该行的最近点(对应O
和P
)。从P
计算d
和r, θ
,我们可以使用矢量数学公式(在许多几何教科书中提供)找到Q
:
在轮播d
和Q
后(后者围绕C
- 我会假设您知道该怎么做):
现在我们只是使用上面用于查找P'
的相同方法找到Q
,然后轻松地提供新的θ'
和r'
:
注意:
请注意,我们需要atan2
(大多数语言都可用)而不是atan
,因为后者无法正确处理所有四个象限。
还有一种特殊情况,即最后一行以非常小的距离通过O
,这会在计算θ
时导致错误。为了解决这种情况,我们可以计算新方向的极角d'
和减去 90°(根据上图中使用的“手动”惯例)。在计算P
。