OpenCV(cv::Point)



cv::Point 是 OpenCV 库中用于表示二维坐标点的一个模板类,它存储一个点的 xy 坐标。

1. 类模板结构

cv::Point 实际上是一个模板类,因此可以根据使用的坐标类型(如整数、浮点数等)创建不同的 Point 类型。常见的有:

  • cv::Point_<int>: 整数类型点,通常表示图像的像素位置。
  • cv::Point_<float>: 浮点类型点,通常用于表示更精确的坐标(如亚像素级别)。
  • cv::Point_<double>: 双精度浮点类型点,适用于需要更高精度的场景。

1.1 常用定义:

  • cv::Point: 等价于 cv::Point_<int>,即整数类型点。
  • cv::Point2f: 等价于 cv::Point_<float>,即浮点类型点。
  • cv::Point2d: 等价于 cv::Point_<double>,即双精度浮点类型点。


2. 成员变量

cv::Point 类有两个成员变量:

  • x: 点的横坐标。
  • y: 点的纵坐标。

例如,对于 cv::Point p(3, 4);,表示一个点的坐标为 (3, 4),即 x = 3, y = 4



3. 构造函数

cv::Point 提供多种构造函数,允许以不同的方式初始化一个点对象:

  • cv::Point(): 默认构造函数,将 xy 都初始化为 0
  • cv::Point(int x, int y): 构造函数,使用指定的 xy 值进行初始化。
  • cv::Point(const cv::Point &pt): 复制构造函数,使用另一个点进行初始化。


4. 常用操作

cv::Point 类支持常见的算术操作,这使得对点进行计算变得简单。


4.1 加法和减法:

  • p1 + p2: 返回新点,其 xy 坐标分别为两个点的 xy 坐标之和。
  • p1 - p2: 返回新点,其 xy 坐标分别为两个点的 xy 坐标之差。

4.2 标量乘法和除法:

  • p * factor: 点的坐标乘以一个标量 factor,返回新的点。
  • p / factor: 点的坐标除以一个标量 factor,返回新的点。

4.3 比较操作:

  • p1 == p2: 比较两个点的 xy 是否相等。
  • p1 != p2: 判断两个点的 xy 是否不相等。


5. 示例

以下是一些使用 cv::Point 的简单示例:

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    // 创建点
    cv::Point p1(3, 4);
    cv::Point p2(1, 2);

    // 点的加法
    cv::Point p3 = p1 + p2;  // (4, 6)

    // 点的减法
    cv::Point p4 = p1 - p2;  // (2, 2)

    // 标量乘法
    cv::Point p5 = p1 * 2;   // (6, 8)

    // 比较操作
    if (p1 == p2) {
        std::cout << "Points are equal" << std::endl;
    } else {
        std::cout << "Points are not equal" << std::endl;
    }

    // 输出点的坐标
    std::cout << "p1: (" << p1.x << ", " << p1.y << ")" << std::endl;
    std::cout << "p3: (" << p3.x << ", " << p3.y << ")" << std::endl;

    return 0;
}

输出结果:

Points are not equal
p1: (3, 4)
p3: (4, 6)


6. 应用场景

cv::Point 通常在 OpenCV 中用于表示图像上的像素位置、轮廓点、形状的顶点等。在很多 OpenCV 函数中,例如绘制函数 cv::circle()cv::rectangle(),以及计算几何变换时都会用到 cv::Point



总结

cv::Point 是 OpenCV 中用来表示二维坐标的基础数据结构,通过它可以方便地表示图像的像素位置、形状的顶点等。它支持简单的算术操作和比较操作,常用在各种计算机视觉任务中。



posted @ 2024-09-05 16:07  做梦当财神  阅读(273)  评论(0编辑  收藏  举报