cv::Rect 类 详解
cv::Rect
是 OpenCV 中的一个类,表示一个矩形区域。它常用于图像处理中的矩形区域定义,尤其是在图像裁剪、目标检测、区域分析等任务中。cv::Rect
类非常简洁和高效,提供了多种构造方法和常用操作,使得矩形区域的处理变得简单方便。
cv::Rect
类定义
1 | class cv::Rect |
参数详解
**
x
**:- 矩形左上角的 x 坐标。
**
y
**:- 矩形左上角的 y 坐标。
**
width
**:- 矩形的宽度,表示矩形水平方向的长度。
**
height
**:- 矩形的高度,表示矩形垂直方向的长度。
构造方法
默认构造函数:
1
Rect(); // 默认值 x=0, y=0, width=0, height=0
- 创建一个默认的矩形,通常是 (0, 0) 为左上角,宽度和高度都为 0。
指定坐标和宽高构造矩形:
1
Rect(int _x, int _y, int _width, int _height);
- 通过指定矩形的左上角
(x, y)
和矩形的width
(宽度)和height
(高度)来构造矩形。
- 通过指定矩形的左上角
通过对角线两个点构造矩形:
1
Rect(const Point& pt1, const Point& pt2);
- 使用两个对角点
pt1
和pt2
来创建矩形,pt1
和pt2
表示矩形的对角线的两个点。
- 使用两个对角点
拷贝构造函数:
1
Rect(const Rect& r);
- 通过另一个矩形对象来拷贝构造一个新的矩形。
成员函数
**
area()
**:- 返回矩形的面积(即
width * height
)。
1
int area() const;
- 返回矩形的面积(即
**
empty()
**:- 检查矩形是否为空(即宽度或高度为 0)。
1
bool empty() const;
**
br()
**:- 返回矩形的右下角点。
1
Point br() const; // 返回 (x + width, y + height)
**
tl()
**:- 返回矩形的左上角点。
1
Point tl() const; // 返回 (x, y)
常用操作
矩形相加:
- 两个矩形相加,得到一个包含两个矩形的最小外接矩形。
1
2
3Rect r1(0, 0, 10, 10);
Rect r2(5, 5, 10, 10);
Rect r3 = r1 | r2; // 得到一个包含两个矩形的外接矩形矩形相交:
- 得到两个矩形的交集部分,返回一个新的矩形。
1
2
3Rect r1(0, 0, 10, 10);
Rect r2(5, 5, 10, 10);
Rect r3 = r1 & r2; // 得到两个矩形的交集矩形移动:
- 移动矩形的位置。
1
2
3Rect r(10, 20, 30, 40);
r.x += 5; // 修改 x 坐标
r.y += 5; // 修改 y 坐标矩形包含检测:
- 判断一个点是否在矩形内,或者一个矩形是否包含另一个矩形。
1
2
3
4
5
6
7Rect r(10, 10, 50, 50);
Point pt(30, 30);
bool inside = r.contains(pt); // 判断点 (30, 30) 是否在矩形内
Rect r1(10, 10, 50, 50);
Rect r2(20, 20, 10, 10);
bool contained = r1.contains(r2); // 判断 r2 是否完全包含在 r1 中
常见应用场景
图像裁剪:
- 在图像处理任务中,
cv::Rect
用于指定感兴趣区域(ROI)。通过矩形定义裁剪区域,可以快速地对图像进行裁剪。
1
2
3Mat img = imread("image.jpg");
Rect roi(100, 100, 200, 200); // 定义感兴趣区域
Mat cropped = img(roi); // 裁剪图像- 在图像处理任务中,
目标检测:
- 在目标检测任务中,通常使用矩形框来表示检测到的目标。例如,检测到的人脸、车辆或其他物体通常会使用矩形框进行标记。
图像窗口和标注:
cv::Rect
用于表示图像中的标注区域或绘制图像的窗口。在 OpenCV 中经常会使用矩形框来标记特定区域,如绘制矩形框标记目标。
区域分析:
- 在图像分析中,
cv::Rect
常用于表示分析的区域,尤其是在分割、提取特征等任务中。
- 在图像分析中,
示例代码
创建矩形并输出其属性
1 |
|
输出:
1 | Rect 1: (10, 20, 30, 40) |
总结
cv::Rect
是一个简单而强大的类,用于表示矩形区域,在图像处理、目标检测、图像裁剪、区域分析等多种应用中都有广泛的用途。- 它提供了多种构造方法、成员函数和常用操作,使得矩形的使用非常方便。
cv::Rect
主要用于图像处理中的区域定义、裁剪、目标检测、区域计算等任务,是 OpenCV 中不可或缺的重要类。