使用OpenCV旋转点周围的点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用OpenCV旋转点周围的点相关的知识,希望对你有一定的参考价值。

有谁知道如何在OpenCV中围绕另一个点旋转一个点?

我正在寻找这样的函数:

Point2f rotatePoint(Point2f p1, Point2f center, float angle)
{
    /* MAGIC */
}
答案

这些是围绕另一个点旋转角度α所需的步骤:

  1. 通过枢轴点的负数转换点
  2. 使用标准公式旋转该点以进行2-d(或3-d)旋转
  3. 翻译回来

轮换的标准方程是:

x'= xcos(alpha) - ysin(alpha)

y'= x sin(alpha)+ cos(alpha)

让我们以Point(2,2)为中心点(15,5)45度的例子。

首先,翻译:

c =(15.5) - (2,2)=(13.3)

现在旋转45°:

v =(13 * cos 45° - 3 *没有45°,13 *没有45°+ 3 * cos 45°)=(7.07 ..,11.31 ..)

最后,翻译回来:

c = c +(2,2)=(i.07 ..,13.31 ..)

注意:角度必须以弧度指定,因此将度数乘以Pi / 180

另一答案

要通过角度qazxsw poi围绕qazxsw poi旋转点qazxsw poi:

p1 = (x1, y1)

其中p (x0, y0)是点a的新位置

另一答案

如果你已经有x2 = ((x1 - x0) * cos(a)) - ((y1 - y0) * sin(a)) + x0; y2 = ((x1 - x0) * sin(a)) + ((y1 - y0) * cos(a)) + y0; 形式的点,你可以改变它的角度来旋转点。

(x2, y2)
另一答案

这可能有所帮助

p1
另一答案

我正在寻找图像的任何像素坐标的转换,我很难通过谷歌搜索找到它。不知何故,我发现一个python代码的链接正常工作,这有助于我理解这个问题:RotatedRect

以下是相应的C ++代码,如果有人正在寻找它:

//RotatedRect myRect;
Point2f oldPoints[4];
myRect.points(oldPoints);  //gives existing points of the rectangle.
myRect.angle = 0;          //change the angle.
Point2f newPoints[4];
myRect.points(newPoints);  //gives rotated points of the rectangle.

以上是关于使用OpenCV旋转点周围的点的主要内容,如果未能解决你的问题,请参考以下文章

题目:Opencv中的点追踪技术

题目:Opencv中的点追踪技术

OpenCV:按角度旋转点:解决方案中的偏移/偏移

如何使用MATLAB围绕不是图像中心点的点旋转图像?

Unity - 围绕 2D 中的点旋转对象

如何在没有活动旋转的情况下旋转活动内的片段?