OpenCV中的坐标运算 [C#]
在C#语言中,可以使用OpenCV库进行坐标运算,包括平移、缩放、点到点的距离和点到线的距离。下面是一些示例代码:
平移操作:
using OpenCvSharp;// 定义原始点的坐标
Point2f originalPoint = new Point2f(100, 100);// 定义平移向量
Vec2f translationVector = new Vec2f(50, 50);// 进行平移操作
Point2f translatedPoint = originalPoint + translationVector;Console.WriteLine($"原始点坐标:({originalPoint.X}, {originalPoint.Y})");
Console.WriteLine($"平移向量:({translationVector.Item0}, {translationVector.Item1})");
Console.WriteLine($"平移后点坐标:({translatedPoint.X}, {translatedPoint.Y})");
缩放操作:
using OpenCvSharp;// 定义原始点的坐标
Point2f originalPoint = new Point2f(100, 100);// 定义缩放因子
float scaleFactor = 0.5f;// 进行缩放操作
Point2f scaledPoint = originalPoint * scaleFactor;Console.WriteLine($"原始点坐标:({originalPoint.X}, {originalPoint.Y})");
Console.WriteLine($"缩放因子:{scaleFactor}");
Console.WriteLine($"缩放后点坐标:({scaledPoint.X}, {scaledPoint.Y})");
点到点的距离:
using OpenCvSharp;// 定义两个点的坐标
Point2d point1 = new Point2f(100, 100);
Point2d point2 = new Point2f(200, 200);// 计算两点之间的距离
double distance = Math.Sqrt(Math.Pow(point1.X - point2.X, 2) + Math.Pow(point1.Y - point2.Y, 2));Console.WriteLine($"点1坐标:({point1.X}, {point1.Y})");
Console.WriteLine($"点2坐标:({point2.X}, {point2.Y})");
Console.WriteLine($"点到点的距离:{distance}");
点到线的距离:
using OpenCvSharp;// 定义点的坐标
Point2d point = new Point2f(100, 100);// 定义线的两个端点坐标
Point2d lineStart = new Point2f(0, 0);
Point2d lineEnd = new Point2f(200, 200);double A = lineStart.Y - lineEnd.Y;
double B = lineEnd.X - lineStart.X;
double C = lineStart.X * lineEnd.Y - lineStart.Y * lineEnd.X;// 计算点到线的距离
double distance = Math.Abs(A * point.X + B * point.Y + C) / Math.Sqrt(Math.Pow(A, 2) + Math.Pow(B, 2));Console.WriteLine($"点坐标:({point.X}, {point.Y})");
Console.WriteLine($"线的起点坐标:({lineStart.X}, {lineStart.Y})");
Console.WriteLine($"线的终点坐标:({lineEnd.X}, {lineEnd.Y})");
Console.WriteLine($"点到线的距离:{distance}");
旋转: 在OpenCV中,可以使用GetRotationMatrix2D方法来获取一个旋转矩阵,并使用WarpAffine方法来进行图像旋转。例如:
Mat image = Cv2.ImRead("image.jpg", ImreadModes.Color);Point center = new Point(image.Width / 2, image.Height / 2);
double angle = 45;
double scale = 1;// 获取旋转矩阵
Mat rotMatrix = Cv2.GetRotationMatrix2D(center, angle, scale);// 进行图像旋转
Mat rotatedImage = new Mat();
Cv2.WarpAffine(image, rotatedImage, rotMatrix, image.Size());
在上面的例子中,首先读取了一个图像,并指定旋转中心、旋转角度和缩放比例。然后使用GetRotationMatrix2D方法获取旋转矩阵,再使用WarpAffine方法对图像进行旋转。最后得到了旋转后的图像。