当前位置: 首页 > news >正文

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方法对图像进行旋转。最后得到了旋转后的图像。


http://www.mrgr.cn/news/60275.html

相关文章:

  • GO语言基础教程:9.切片
  • Go 语言结构体
  • Yaklang里传来,Java-hack升级啦~
  • MarkDown代码
  • 第十七周:机器学习
  • Linux TCP CC状态机
  • 终于有人把主数据讲透了!
  • 开发涉及的安全规范整理
  • 【AIGC】从CoT到BoT:AGI推理能力提升24%的技术变革如何驱动ChatGPT未来发展
  • pikachu靶场——垂直越权
  • Pandas数据分析库简介
  • 【设计模式】使用python 实践框架设计
  • 网站域名如何申请?有哪些步骤?
  • 开源项目-拍卖管理系统
  • 轻松部署Dify并实现Ollama与Xinference集成教程!
  • C++异常、嵌套类
  • 基于SSM少儿编程管理系统的设计
  • 帝佛卡干邑荣耀登陆泰国王权King Power
  • MPP音视频总结
  • 如何通过自签名证书让本地环境变为 https
  • 高通学习1-TLMM(TODO)
  • 深度学习并行训练算法一锅炖: DDP, TP, PP, ZeRO
  • 鸿蒙开发融云demo录制语音消息
  • 转换手机录音文件为文本
  • 鸿蒙生态开发以及技术栈介绍
  • 第三十二篇:TCP协议粘包和滑动窗口,TCP系列七