OpenCV中的坐标运算 [C#]

ops/2024/11/1 13:06:31/

在C#语言中,可以使用OpenCV库进行坐标运算,包括平移、缩放、点到点的距离和点到线的距离。

从Nuget下载 OpenCvSharp4.Windows

下面是一些示例代码:

 点到点的距离:

using OpenCvSharp;/// <summary>
/// 点到点距离
/// </summary>
/// <param name="point1">点1</param>
/// <param name="point2">点2</param>
/// <returns>距离</returns>
private double Distance_Point2Point(Point2d point1, Point2d point2)
{double distance = Math.Sqrt(Math.Pow(point1.X - point2.X, 2) + Math.Pow(point1.Y - point2.Y, 2));return distance;
}

点到线的距离:

using OpenCvSharp;/// <summary>
/// 点到直线距离
/// </summary>
/// <param name="point">点</param>
/// <param name="line">两点组成直线</param>
/// <returns>距离</returns>
private double Distance_Point2Line(Point2d point, Point2d[] line)
{Point2d lineStart = line[0];Point2d lineEnd = line[1];// 以lineStart到lineEnd为直线,直线方程AX+BY+C=0double 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));return distance;
}

平移操作:

using OpenCvSharp;/// <summary>
/// 平移操作
/// </summary>
/// <param name="point_lst">点集</param>
/// <param name="originalPoint">新坐标系的原点</param>
/// <returns>点集</returns>
private List<Point2d> Translated_Option(List<Point2d> point_lst, Point2d originalPoint)
{List<Point2d> lst = new List<Point2d>();foreach(Point2d p in point_lst){Point2d pz = new Point2d(p.X - originalPoint.X, p.Y - originalPoint.Y);lst.Add(pz);}return lst;
}

缩放操作:

using OpenCvSharp;/// <summary>
/// 缩放操作
/// </summary>
/// <param name="point_lst">点集</param>
/// <param name="originalPoint">缩放的中心点</param>
/// <param name="scaleFactor">缩放因子</param>
/// <returns>点集</returns>
private List<Point2d> Scale_Option(List<Point2d> point_lst, Point2d originalPoint, double scaleFactor)
{List<Point2d> lst = new List<Point2d>();foreach (Point2d p in point_lst){double X = (p.X - originalPoint.X) * scaleFactor + originalPoint.X;double Y = (p.Y - originalPoint.Y) * scaleFactor + originalPoint.Y;Point2d pz = new Point2d(X, Y);lst.Add(pz);}return lst;
}


 

旋转操作:

using OpenCvSharp;/// <summary>
/// 旋转操作
/// </summary>
/// <param name="point_lst">点集</param>
/// <param name="originalPoint">旋转的中心点</param>
/// <param name="radian">偏转角的弧度值</param>
/// <returns>点集</returns>
private List<Point2d> Rotate_Option(List<Point2d> point_lst, Point2d originalPoint, double radian)
{List<Point2d> lst = new List<Point2d>();foreach (Point2d p in point_lst){double _X = p.X - originalPoint.X;double _Y = p.Y - originalPoint.Y;double X_ = _X * Math.Cos(radian) + _Y * Math.Sin(radian);double Y_ = _Y * Math.Cos(radian) - _X * Math.Sin(radian);double X = X_ + originalPoint.X;double Y = Y_ + originalPoint.Y;Point2d pz = new Point2d(X, Y);lst.Add(pz);}return lst;
}


http://www.ppmy.cn/ops/130144.html

相关文章

Kotlin协程分析之CoroutineScheduler-WorkQueue队列

WorkQueue WorkQueue是CoroutineScheduler调度器中Worker线程使用存储任务的容器。本身逻辑本简单。结合Kotlin协程分析之CoroutineScheduler文章一起看可以更好理解。 WorkQueue没有自动扩容的逻辑&#xff0c;满了是无法添加的&#xff0c;可以添加CPU型任务&#xff0c;也…

配置BGP与IGP交互和路由自动聚合示例

组网需求 如图所示&#xff0c;用户将网络划分为AS65008和AS65009&#xff0c;在AS65009内&#xff0c;使用IGP协议来计算路由&#xff08;该例使用OSPF做为IGP协议&#xff09;。要求实现两个AS之间的互相通信。 配置思路 采用如下的思路配置BGP与IGP交互&#xff1a; 在AR…

各种本地商家和服务,尽在同城小程序

随着智能手机的普及和互联网技术的快速发展&#xff0c;越来越多的行业开始向数字化转型。我们常常需要在不同的应用程序之间切换&#xff0c;以寻找本地的服务和商家。装修、外卖、旅游、婚庆……传统上&#xff0c;每个行业都有各自独立的APP&#xff0c;这种分散的模式既不方…

跨平台OFD、PDF文档预览UTS插件

〇、介绍 Seal-OfdReader是跨平台OFD文档预览原生插件&#xff0c;具有以下特点&#xff1a; 支持UniApp项目集成&#xff0c;也支持原生Android项目集成 非腾讯X5&#xff0c;无内核加载&#xff0c;高效率、稳定高可用 支持在线文档&#xff0c;也支持离线设备本地文档 支…

Spring Boot技术在校园社团管理中的高效应用

3系统分析 3.1可行性分析 通过对本校园社团信息管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本校园社团信息管理系统采用SSM框架&#xff0c;JAVA作…

SQL实战训练之,力扣:1843. 可疑银行账户

目录 一、力扣原题链接 二、题目描述 三、建表语句 四、题目分析 五、SQL解答 六、最终答案 七、验证 八、知识点 一、力扣原题链接 1843. 可疑银行账户 二、题目描述 表: Accounts ---------------------- | Column Name | Type | ---------------------- | acco…

工作笔记【六】

任务1.对数据表进行CRUD操作 第一个任务首先是最基本的CRUD操作&#xff0c;很简单&#xff0c;直接放代码 package com.example.demo.demos.web.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data NoArgsConstructor AllAr…

Ubuntu-22.04 虚拟机安装

1. Ubuntu安装方式 1.1. 基于物理介质安装 光盘安装&#xff1a;通过将 Ubuntu 镜像刻录到光盘&#xff0c;在计算机 BIOS/UEFI 中设置光盘为第一启动项&#xff0c;然后按照安装程序的提示进行语言选择、分区、用户信息设置等操作来完成安装。这种方式需要有光盘刻录设备和空…