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