OpenCV(cv::Point)
cv::Point 是 OpenCV 库中用于表示二维坐标点的一个模板类,它存储一个点的 x 和 y 坐标。
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(): 默认构造函数,将x和y都初始化为0。cv::Point(int x, int y): 构造函数,使用指定的x和y值进行初始化。cv::Point(const cv::Point &pt): 复制构造函数,使用另一个点进行初始化。
4. 常用操作
cv::Point 类支持常见的算术操作,这使得对点进行计算变得简单。
4.1 加法和减法:
p1 + p2: 返回新点,其x和y坐标分别为两个点的x和y坐标之和。p1 - p2: 返回新点,其x和y坐标分别为两个点的x和y坐标之差。
4.2 标量乘法和除法:
p * factor: 点的坐标乘以一个标量factor,返回新的点。p / factor: 点的坐标除以一个标量factor,返回新的点。
4.3 比较操作:
p1 == p2: 比较两个点的x和y是否相等。p1 != p2: 判断两个点的x和y是否不相等。
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 中用来表示二维坐标的基础数据结构,通过它可以方便地表示图像的像素位置、形状的顶点等。它支持简单的算术操作和比较操作,常用在各种计算机视觉任务中。

浙公网安备 33010602011771号