OpenCV中的坐标运算 [C#]

在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.mzph.cn/bicheng/58338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows命令汇总

windows命令汇总 1. 查看注册表的值 reg query “HKLM\Software\YourSoftwareKey” /v YourValueName 举例 reg query “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters” /v MaxUserPort reg query “HKEY_LOCAL_MACHINE\SYSTEM\Current…

构建自然灾害预警决策一体化平台,筑牢工程安全数字防线

近年来&#xff0c;国家和部委也强调了要切实加强地质灾害监测预警。作为国内智慧应急领域的先行者&#xff0c;Mapmost持续探索利用数字孪生技术&#xff0c;推进自然灾害风险预警精细化&#xff0c;强化对监测数据的综合分析和异常信息研判处置。建立健全区域风险预警与隐患点…

Redis中Lua脚本的使用场景

Redis 中的 Lua 脚本可以用于多种场景&#xff0c;以下是一些常见的使用场景及其对应的 Java 实现示例。 通过使用 Lua 脚本&#xff0c;可以在 Redis 中实现复杂的逻辑和原子操作&#xff0c;同时利用 Java 客户端&#xff08;如 Spring Data Redis&#xff09;方便地执行这些…

使用 Qt GRPC 构建高效的 Trojan-Go 客户端:详细指南

使用 Qt GRPC 构建高效的 Trojan-Go 客户端&#xff1a;详细指南 初识 Qt 和 gRPC 什么是 Qt&#xff1f;什么是 gRPC&#xff1f; 项目结构概述创建 proto 文件定义 API 下载 api.proto 文件解析 proto 文件 1. package 与 option 语句2. 消息类型定义 TrafficSpeedUserUserSt…

CI/CD 的原理

一、CI/CD 的概念 CI/CD是一种软件开发流程&#xff0c;旨在通过自动化和持续的集成、测试和交付实现高质量的软件产品。 CI(Continuous Integration)持续集成 目前主流的开发方式是协同开发&#xff0c;即多位开发人员同事处理同意应用不同模块或功能。 如果企业在同一时间将…

LabVIEW开发的控制阀监控与维护系统

LabVIEW开发一套自动测试软件&#xff0c;用于控制阀的实时监控、数据采集、维护管理以及报警通知。此系统的目标是通过便捷的操作界面、可靠的通信接口和高效的数据管理&#xff0c;为工厂设备管理提供全面的支持。 1. 项目需求 目标是实现一个控制阀管理系统&#xff0c;能够…

采用STM32CubeMX和HAL库的外部中断设计实例

目录 STM32F1外部中断的硬件设计 STM32F1外部中断的软件设计 通过Keil MDK实现工程 通过Keil MDK实现工程的步骤如下&#xff1a; 中断在嵌入式应用中占有非常重要的地位&#xff0c;几乎每个控制器都有中断功能。中断对保证紧急事件在第一时间处理是非常重要的。 设计使用外…

AUTOSAR从入门到精通-BswM模块

前言 BSW模式管理器是实现驻留在BSW中的部分车辆模式管理和应用程序模式管理概念的模块。它的职责是根据简单的规则对来自应用层SW-C或其他BSW模块的模式请求进行仲裁,并根据仲裁结果执行动作。 BswM即BSW Mode Manager,用一句概括BSW的功能就是接收其他模块的模式请求,判断…

Python酷库之旅-第三方库Pandas(173)

目录 一、用法精讲 796、pandas.Float32Dtype类 796-1、语法 796-2、参数 796-3、功能 796-4、返回值 796-5、说明 796-6、用法 796-6-1、数据准备 796-6-2、代码示例 796-6-3、结果输出 797、pandas.Float64Dtype类 797-1、语法 797-2、参数 797-3、功能 797-…

Bi-LSTM-CRF实现中文命名实体识别工具(TensorFlow)

项目源码获取方式见文章末尾&#xff01; 回复暗号&#xff1a;13&#xff0c;免费获取600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 **《------往期经典推荐------》**项目名称 1.【MobileNetV2实现实时口罩检测tensorflow】 2.【卫星图像道路检测DeepLabV3P…

AI 聊天机器人的兴起:GPT-3 和 BERT 如何重新定义对话体验

一、说明 当我们深入研究 AI 世界时&#xff0c;了解自然语言处理 &#xff08;NLP&#xff09; 领域取得的巨大进步非常重要。NLP 是 AI 的一个分支&#xff0c;专注于使计算机能够理解、解释和生成人类语言。GPT-3 和 BERT 等语言模型的开发是这一旅程中的一个重要里程碑&…

1FreeRTOS学习(队列、二值信号量、计数型信号量之间的相同点和不同点)

相同点&#xff1a; &#xff08;1&#xff09;传递区间 队列、二值信号量、计数型信号量均可用在任务与任务&#xff0c;任务与中断之间进行消息传递 &#xff08;2&#xff09; 传递方式 创建队列--发送队列--接受队列 创建二值信号量--发送二值信号量--接受二值信号量 创建计…

15.三数之和 18.四数之和

题目:15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 思路: 此题无法沿用两数之和的哈希的方法&#xff0c;因为要考虑到结果去重的问题&#xff0c;这里采用双指针算法。 先将数组排序&#xff0c;然后有一层for循环&#xff0c;i从下标0的地方开始&#xff0c;同时…

UDP(用户数据报协议)端口监控

随着网络的扩展&#xff0c;确保高效的设备通信对于优化网络功能变得越来越重要。在这个过程中&#xff0c;端口发挥着重要作用&#xff0c;它是实现外部设备集成的物理连接器。通过实现数据的无缝传输和交互&#xff0c;端口为网络基础设施的顺畅运行提供了保障。端口使数据通…

React 前端框架开发入门案例

以下是一个使用 React 进行前端框架开发的入门案例&#xff0c;实现一个简单的待办事项列表应用。 一、准备工作 安装 Node.js&#xff1a;React 需要 Node.js 环境来运行。你可以从 Node.js 官方网站下载并安装适合你操作系统的版本。 创建项目目录&#xff1a;在你的电脑上…

技术成神之路:设计模式(二十三)解释器模式

相关文章&#xff1a;技术成神之路&#xff1a;二十三种设计模式(导航页) 介绍 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;用于定义一种语言的文法表示&#xff0c;并提供一个解释器来处理这种文法。它用于处理具有特定语法或表达…

STM32G4 双ADC模式之同时注入模式

目录 概述 1 认识双ADC模式 2 功能实现 2.1 功能介绍 2.2 实现原理 概述 本文主要介绍STM32G4 双ADC模式之同时注入模式的相关内容&#xff0c;包括ADC模块的功能介绍&#xff0c;实现框架结构&#xff0c;以及注入模式ADC的转换的实现原理。 1 认识双ADC模式 双ADC模式可…

函数与c风格字符串

c风格字符串表达形式 const char* str "mamamiya"; char ghost[] "youpomian"; c风格字符串作为参数 #define _CRT_SECURE_NO_WARNINGS#include <iostream> #include<string>unsigned int c_in_str(const char* str, char ch); int main(…

安卓中ViewModel的常用方法

在安卓中使用ViewModel确实方便很多&#xff0c;可以将数据层和UI层分开&#xff0c;同时还不同担心线程异步和接口异步请求回来 Activity被Finish的情况&#xff0c;同时ViewModel中的数据还可以实现多界面数据共享&#xff0c;甚至使用ViewModel查询数据库&#xff0c;只要数…

java类静态变量初始化在openjdk17源码中体现

##有请志愿者OtherClass.java public class OtherClass {private static int CONSTANT_O9876;public int o1234;public void dddd(){String dddd "dddd";System.out.println(ddddCONSTANT_O);}} 类字节码 Classfile /home/yym/debug-java/OtherClass.classLast m…