OpenCV(cv::Point、cv::Rect、cv::Mat)
目录
在OpenCV中,cv::Point、cv::Rect 和 cv::Mat 是三个常用的类,分别用于表示点、矩形和图像/矩阵数据。
1. cv::Point
cv::Point 类用于表示二维空间中的一个点,有两个常用的类型:
cv::Point: 用于存储整型的点坐标(x, y)。cv::Point_<T>: 模板类,允许使用其他数据类型(如float或double)。
1.1 主要属性:
x: 点的 x 坐标。y: 点的 y 坐标。
1.2 示例:
cv::Point p1(10, 20); // 创建一个点 (10, 20)
cv::Point2f p2(10.5f, 20.5f); // 创建一个浮点类型的点
1.3 用途:
cv::Point 常用于表示图像中的坐标位置,如像素位置、直线的端点、形状的顶点等。
2. cv::Rect
cv::Rect 类用于表示矩形,通过其左上角的点和尺寸来定义矩形。常用于表示图像中的一个区域(ROI, Region of Interest)。
2.1 主要属性:
x: 矩形左上角的 x 坐标。y: 矩形左上角的 y 坐标。width: 矩形的宽度。height: 矩形的高度。
2.2 主要方法:
contains(const cv::Point& pt): 判断点是否在矩形内部。area(): 计算矩形的面积。tl(): 返回矩形的左上角坐标。br(): 返回矩形的右下角坐标。
2.3 示例:
cv::Rect r1(10, 10, 50, 50); // 创建一个矩形,左上角为 (10, 10),宽度为 50,高度为 50
cv::Point p(15, 15);
if (r1.contains(p)) {
std::cout << "Point is inside the rectangle!" << std::endl;
}
2.4 用途:
- 在图像处理中用于定义感兴趣区域(ROI),比如裁剪图像、绘制矩形、检测到的物体边界框等。
3. cv::Mat
cv::Mat 类是 OpenCV 中最基础和核心的数据结构之一,用于存储图像和矩阵数据。它可以存储不同类型的数据(如 8 位无符号整型、浮点型等)和多维数组(如灰度图、彩色图、三维数据等)。
3.1 主要属性:
rows: 矩阵的行数(图像的高度)。cols: 矩阵的列数(图像的宽度)。data: 指向矩阵数据的指针。type(): 返回矩阵元素的数据类型(如CV_8UC1,CV_32FC3等)。
3.2 主要方法:
at<T>(int y, int x): 访问矩阵中(x, y)位置的元素。clone(): 深拷贝矩阵。copyTo(): 将当前矩阵的内容拷贝到另一个矩阵。zeros(),ones(): 创建全零矩阵或全一矩阵。reshape(): 改变矩阵的维度。convertTo(): 转换矩阵的数据类型。
3.3 示例:
cv::Mat img = cv::imread("image.jpg"); // 读取图像文件
cv::Mat gray;
cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY); // 转换为灰度图像
int pixelValue = gray.at<uchar>(10, 10); // 访问 (10, 10) 处的像素值
3.4 用途:
cv::Mat是所有图像处理操作的基础,可以用于存储图像、视频帧、点云、核矩阵等各种数据。- 它支持各种类型的数据操作,如像素级别的操作、过滤、变换、特征提取等。
4. 总结
cv::Point: 表示二维空间中的点,用于表示像素位置、形状顶点等。cv::Rect: 表示矩形区域,通常用于定义图像中的兴趣区域或检测到的物体边界。cv::Mat: OpenCV 中最核心的数据结构,用于存储图像、矩阵、视频帧等多维数组数据。
它们共同构成了 OpenCV 中大部分图像处理任务的基础,彼此之间可以协同工作。例如,使用 cv::Rect 定义的 ROI 可以用来从 cv::Mat 图像中裁剪子区域,cv::Point 可以指定 ROI 的顶点位置等。

浙公网安备 33010602011771号