如何使用变换矩阵旋转一个点?
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 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);
???
不幸的是,我缺乏评论的代表。前面的答案大部分是正确的,但是 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 });
}
}
我很惊讶一切都可以围绕其中心旋转一个矩形,只有当我围绕一个特定点旋转足够大的量时,我才注意到它不太正确
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 });
}
}