0

如何使用变换矩阵旋转一个点?

 var point = new PointF(100, 150);
 var center = new PointF(100, 100);
 var angle = 45;

 var rotateMat = Cv2.GetRotationMatrix2D(new Point2f(center.Y, center.X), angle, 1);
 ???
4

2 回答 2

1

不幸的是,我缺乏评论的代表。前面的答案大部分是正确的,但是 Point 类期望 x 作为第一个参数(可能只是我正在使用的 nuget 包)。所以我需要稍作改动:

static class Hlp
{
  public static PointF ToPointF(this Mat mat)
  {
    return new PointF((float)mat.Get<double>(0, 0), (float)mat.Get<double>(1, 0));
  }
  public static Mat ToMat(this PointF point)
  {
    return new Mat(3, 1, MatType.CV_64FC1, new double[] { point.X, point.Y, 1 });
  }
}

我很惊讶一切都可以围绕其中心旋转一个矩形,只有当我围绕一个特定点旋转足够大的量时,我才注意到它不太正确

于 2021-09-24T01:32:03.720 回答
0
var point = new PointF(100, 150);
var center = new PointF(100, 100);
var angle = 45;

var rotateMat = Cv2.GetRotationMatrix2D(new Point2f(center.Y, center.X), angle, 1);
var resultPoint = (rotateMat * point.ToMat()).ToMat().ToPointF();

static class Hlp
{
  public static PointF ToPointF(this Mat mat)
  {
    return new PointF((float)mat.Get<double>(1, 0), (float)mat.Get<double>(0, 0));
  }
  public static Mat ToMat(this PointF point)
  {
    return new Mat(3, 1, MatType.CV_64FC1, new double[] { point.Y, point.X, 1 });
  }
}
于 2014-04-16T23:45:56.407 回答