Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 围绕非原点旋转Vec2f线_Opencv_Math_Vector_Rotation_Polar Coordinates - Fatal编程技术网

Opencv 围绕非原点旋转Vec2f线

Opencv 围绕非原点旋转Vec2f线,opencv,math,vector,rotation,polar-coordinates,Opencv,Math,Vector,Rotation,Polar Coordinates,在OpenCv中,直线定义为极坐标,表示为R和θ。在我的例子中,我在和图像中找到了一条线,旋转了图像,现在我想知道这条线在旋转图像中的值。在这种情况下,我绕着一个已知的点旋转,这个点不是原点 我知道我可以简单地通过加上旋转角度来找到θ的新值,但我不知道如何将一条极线旋转一个非零点 所以我真正要问的是,如果a绕(Xr,Yr)旋转直线,R的新值是多少 我会注意到,我意识到我可能只是在新图像中再次找到这条线,但在找到我想要的那条线时需要大量的计算,因此如果有一个公式,我可以用来找到新的线值,这将是更好

在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非常感谢。我欢迎任何建议或更好的方法——我只是发现使用笛卡尔向量消除了极坐标中的许多特殊情况。