Opencv 围绕非原点旋转Vec2f线
在OpenCv中,直线定义为极坐标,表示为R和θ。在我的例子中,我在和图像中找到了一条线,旋转了图像,现在我想知道这条线在旋转图像中的值。在这种情况下,我绕着一个已知的点旋转,这个点不是原点 我知道我可以简单地通过加上旋转角度来找到θ的新值,但我不知道如何将一条极线旋转一个非零点 所以我真正要问的是,如果a绕(Xr,Yr)旋转直线,R的新值是多少 我会注意到,我意识到我可能只是在新图像中再次找到这条线,但在找到我想要的那条线时需要大量的计算,因此如果有一个公式,我可以用来找到新的线值,这将是更好的Opencv 围绕非原点旋转Vec2f线,opencv,math,vector,rotation,polar-coordinates,Opencv,Math,Vector,Rotation,Polar Coordinates,在OpenCv中,直线定义为极坐标,表示为R和θ。在我的例子中,我在和图像中找到了一条线,旋转了图像,现在我想知道这条线在旋转图像中的值。在这种情况下,我绕着一个已知的点旋转,这个点不是原点 我知道我可以简单地通过加上旋转角度来找到θ的新值,但我不知道如何将一条极线旋转一个非零点 所以我真正要问的是,如果a绕(Xr,Yr)旋转直线,R的新值是多少 我会注意到,我意识到我可能只是在新图像中再次找到这条线,但在找到我想要的那条线时需要大量的计算,因此如果有一个公式,我可以用来找到新的线值,这将是更好
我可以想出一个笨拙但相当简单的方法来实现这一点,使用从任意点找到离直线最近的点的想法。一些图表可以更好地解释这一点: 其中,
C
是旋转中心,Q
是直线上与其最近的点(对应于O
和p
)。通过计算P
和d
从r,θ
,我们可以使用向量数学公式(在许多几何教科书中提供)找到Q
:
旋转d
和Q
(后者围绕C
——我假设您知道如何操作):
现在我们只需使用与上面查找Q
相同的方法来查找p'
,然后简单地给出新的θ'
和r'
:
注:
atan2
(在大多数语言中都可用)而不是atan
,因为后者无法正确处理所有四个象限O
,这将导致计算θ时出错。为了处理这种情况,我们可以计算新方向的极角d'
,然后减去90°(根据上述图表中使用的“手性”惯例)。在计算P
时,不需要采取同样的注意
在笛卡尔坐标系中,可以减去该点,围绕原点旋转,然后再次添加该点。也许这也适用于极坐标系,但不知道如何在极坐标系中进行转换非常好approach@MBo非常感谢。我欢迎任何建议或更好的方法——我只是发现使用笛卡尔向量消除了极坐标中的许多特殊情况。