目录
cv::Rect
是 OpenCV 中的一个用于定义矩形区域的类。它被广泛应用于图像处理任务中,如裁剪图像、绘制矩形或定义图像上的兴趣区域(ROI,Region of Interest)。矩形的定义依赖于左上角的点坐标以及矩形的宽度和高度。
1. 构造函数和用法
cv::Rect
类定义了多种构造函数,你可以用几种不同的方式创建矩形对象:
-
默认构造函数:
cv::Rect rect;
- 创建一个未初始化的矩形,所有参数默认为零。
-
通过坐标和大小创建矩形:
cv::Rect rect(x, y, width, height);
x
和y
: 矩形左上角的坐标。width
: 矩形的宽度。height
: 矩形的高度。
示例:
cv::Rect rect(50, 50, 100, 200);
这将创建一个左上角位于
(50, 50)
,宽度为100
像素,高度为200
像素的矩形。 -
通过两个点创建矩形:
cv::Rect rect(Point1, Point2);
Point1
: 矩形的左上角。Point2
: 矩形的右下角。
示例:
cv::Point p1(30, 40); cv::Point p2(130, 240); cv::Rect rect(p1, p2);
这将创建一个从
(30, 40)
到(130, 240)
的矩形。
2. 常用属性和方法
-
属性:
x
: 矩形左上角的 x 坐标。y
: 矩形左上角的 y 坐标。width
: 矩形的宽度。height
: 矩形的高度。
int x = rect.x; // 获取左上角 x 坐标 int y = rect.y; // 获取左上角 y 坐标 int w = rect.width; // 获取宽度 int h = rect.height; // 获取高度
-
常用方法:
-
area()
: 返回矩形的面积。int area = rect.area(); // 计算面积
-
contains(point)
: 检查一个点是否在矩形内。cv::Point p(60, 70); bool isInside = rect.contains(p); // 如果点 p 在矩形内,则返回 true
-
tl()
和br()
: 获取矩形的左上角(tl()
)和右下角(br()
)点的坐标。cv::Point top_left = rect.tl(); // 获取左上角点 cv::Point bottom_right = rect.br(); // 获取右下角点
-
&
(矩形求交集): 返回两个矩形的交集区域。cv::Rect rect1(10, 10, 50, 50); cv::Rect rect2(30, 30, 50, 50); cv::Rect intersect = rect1 & rect2; // 返回交集区域
-
|
(矩形求并集): 返回两个矩形的并集区域。cv::Rect union_rect = rect1 | rect2; // 返回并集区域
-
3. 示例
下面是一个在图像上绘制矩形并裁剪 ROI 的示例:
#include <opencv2/opencv.hpp>
int main() {
// 读取图像
cv::Mat img = cv::imread("image.jpg");
// 定义矩形
cv::Rect rect(50, 50, 200, 150);
// 绘制矩形
cv::rectangle(img, rect, cv::Scalar(0, 255, 0), 2);
// 裁剪图像 ROI
cv::Mat roi = img(rect);
// 显示结果
cv::imshow("Rectangle", img);
cv::imshow("ROI", roi);
cv::waitKey(0);
return 0;
}
4. 用途
- ROI 操作: 在图像处理中,
cv::Rect
经常被用作定义感兴趣区域,用来进行图像裁剪、缩放或进一步处理。 - 目标检测: 在目标检测中,检测到的对象通常用矩形框进行标记,
cv::Rect
可以存储这些边界框的信息。 - 图像处理与分析: 矩形在一些基于块的图像处理算法中被广泛使用,比如分块处理。
cv::Rect
是 OpenCV 图像处理中的重要类之一,其灵活性使得它能够适应不同的任务需求。
标签:50,OpenCV,Rect,左上角,矩形,cv,rect From: https://www.cnblogs.com/keye/p/18384595