OpenCV中的坐标运算 [C#]

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

从Nuget下载 OpenCvSharp4.Windows

下面是一些示例代码:

点到点的距离:

cs 复制代码
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;
}

点到线的距离:

cs 复制代码
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=0
    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));
    return distance;
}

平移操作:

csharp 复制代码
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;
}

缩放操作:

csharp 复制代码
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;
}

旋转操作:

csharp 复制代码
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;
}
相关推荐
Hello server4 小时前
DeepSeek Harness 深度体验:把「万物皆插件」做到极致的 AI 编程 Agent
人工智能
牛哇网络工作室8 小时前
UnityHDRP写实数字人全流程基础5—语音输入和语音识别
android·unity·c#·游戏引擎·aigc·语音识别·xcode
驴友花雕8 小时前
【花雕动手做】行空板 K10 系列实验之人工智能语音识别小车的10个参考案例
人工智能·单片机·嵌入式硬件·语音识别·行空板 k10 系列实验·花雕动手做·小车的10个参考案例
火山引擎开发者社区10 小时前
DeepSeek-V4 Pro 发布,veStack Day 0 完成模型适配
人工智能
2501_9269783310 小时前
AGI 的四种瓶颈:资源型还是发现型--以及DSH的位置
人工智能·经验分享·笔记·ai写作
Q4639134910 小时前
线下销售复盘难落地,AI 会话设备能帮上啥忙
人工智能·自然语言处理
ebok.10 小时前
国产大模型落地业务系统的优选载体:京微智枢信创 AI 业务支撑平台
大数据·人工智能·低代码·ai
wujian831110 小时前
怎么用文心生成word文档?从格式错乱到智能导出,AI导出鸭让创作再无后顾之忧
人工智能·ai·word·豆包·deepseek·ai导出鸭
动物园猫11 小时前
猪危险行为目标检测数据集:3类别、5,000+张图像 | 目标检测
人工智能·目标检测·计算机视觉
ai产品老杨11 小时前
AI视频分析并发优化完整流程:解决多路视频并发不足与高延迟排查指南
人工智能·音视频