223. Rectangle Area

本文介绍了一种计算二维平面上两个矩形重叠部分面积的方法。通过确定两个矩形的左下角和右上角坐标来定义矩形,并通过比较这些坐标来找出重叠区域。提供了一个示例输入和输出,以及实现该功能的C++代码。

在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。

每个矩形由其左下顶点和右上顶点坐标表示,如图所示。

 

示例:

输入: -3, 0, 3, 4, 0, -1, 9, 2 输出: 45

说明: 假设矩形面积不会超出 int 的范围。

 

class Solution {
public:
	int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) 
	{
		int x1 = max(A, E);
		int y1 = max(B, F);
		int x2 = min(C, G);
		int y2 = min(D, H);
		int s1 = (C - A) * (D - B);
		int s2 = (G - E) * (H - F);
		int s3 = 0;
		if(x1 <= x2 && y1 <= y2)
			s3 = (x2 - x1) * (y2 - y1);
		return s1 + s2 - s3;
	}
};

 

转载于:https://www.cnblogs.com/lMonster81/p/10433817.html

<think> 我们正在讨论dlib.rectangle。根据引用[2]和引用[4]中的代码示例,dlib.rectangle是dlib库中用于表示矩形区域的对象。它通常用于指定图像中目标的位置(如人脸检测框、跟踪目标初始框等)。 核心功能与特点: 1. 表示矩形区域:通过左上角和右下角坐标定义矩形 2. 坐标系统:采用图像处理常用的坐标系(左上角为原点(0,0),向右为x正方向,向下为y正方向) 3. 属性访问:提供left(), top(), right(), bottom()等方法获取边界坐标 4. 与OpenCV Rect兼容:可通过坐标转换与OpenCV的矩形表示互操作 使用方法: 1. 创建矩形对象: ```python import dlib # 方法1: 直接指定四个边界坐标 rect1 = dlib.rectangle(left, top, right, bottom) # 方法2: 从OpenCV的bbox转换 (x,y,w,h格式) x, y, w, h = cv2_rect # 假设cv2_rect来自cv2.boundingRect() rect2 = dlib.rectangle(int(x), int(y), int(x+w), int(y+h)) ``` 2. 访问矩形属性: ```python print(f"左上角: ({rect.left()}, {rect.top()})") print(f"右下角: ({rect.right()}, {rect.bottom()})") print(f"宽度: {rect.width()}, 高度: {rect.height()}") print(f"面积: {rect.area()}") ``` 3. 几何运算(部分支持): ```python # 矩形平移 moved_rect = dlib.move_rect(rect, x_offset, y_offset) # 矩形缩放 scaled_rect = dlib.resize_rect(rect, scale_factor) # 矩形交集 overlap = dlib.rectangle() if rect1.intersect(rect2, overlap): # 若存在交集 print(f"交集区域: {overlap}") ``` 4. 实际应用场景(结合引用[2][3][4]): - 人脸检测结果表示(引用[2]): ```python # 检测人脸 detector = dlib.get_frontal_face_detector() dets = detector(image, 1) # 返回dlib.rectangle列表 for rect in dets: # 绘制矩形框 cv2.rectangle(image, (rect.left(), rect.top()), (rect.right(), rect.bottom()), (0,255,0), 2) ``` - 目标跟踪初始化(引用[4]): ```python tracker = dlib.correlation_tracker() tracker.start_track(image, dlib.rectangle(startX, startY, endX, endY)) ``` - 人脸关键点检测(引用[3]): ```python predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") shape = predictor(image, rect) # 输入为dlib.rectangle对象 ``` 注意事项: 1. 坐标类型:所有坐标均为整数(int) 2. 坐标范围:right和bottom是开区间(即矩形不包含right列和bottom行的像素) $$ [left, right-1] \times [top, bottom-1] $$ 3. 与OpenCV Rect差异: | 属性 | dlib.rectangle | OpenCV Rect | |------------|-------------------|-------------------| | 表示方式 | (left,top,right,bottom) | (x,y,width,height) | | 右下角计算 | 直接存储 | x+width, y+height | | 包含关系 | 右下开区间 | 右下闭区间 | 转换工具函数: ```python # dlib.rectangle → OpenCV Rect (x,y,w,h) def dlib_rect_to_cv(rect): x = rect.left() y = rect.top() w = rect.width() h = rect.height() return (x, y, w, h) # OpenCV Rect → dlib.rectangle def cv_rect_to_dlib(x, y, w, h): return dlib.rectangle(x, y, x+w, y+h) ``` 总结: dlib.rectangle是dlib库中用于表示矩形区域的核心数据结构,具有以下优势: 1. **高效内存**:仅存储四个整数坐标 2. **计算优化**:内置快速几何运算方法 3. **API统一**:完美适配dlib的人脸检测、目标跟踪等模块 §§相关问题§§ 1. dlib.rectangle与OpenCV的Rect在使用上有哪些主要区别? 2. 如何用dlib.rectangle实现多个矩形区域的合并? 3. 在目标跟踪任务中,dlib.rectangle如何与correlation_tracker协同工作? </think> ### `dlib.rectangle` 使用指南及功能介绍 `dlib.rectangle` 是 dlib 库中用于**表示图像内矩形区域**的核心数据结构,广泛应用于目标检测、跟踪和关键点定位等计算机视觉任务。以下是详细解析: --- #### 一、核心功能与特点 1. **几何表示** - 通过**左上角**和**右下角**坐标定义矩形: $$ \text{rect} = \text{dlib.rectangle}(\mathtt{left}, \mathtt{top}, \mathtt{right}, \mathtt{bottom}) $$ - 坐标系原点为图像左上角($x$ 轴向右,$y$ 轴向下) 2. **边界访问方法** ```python rect = dlib.rectangle(100, 120, 300, 320) print(rect.left()) # 100 (左边界x坐标) print(rect.top()) # 120 (上边界y坐标) print(rect.right()) # 300 (右边界x坐标) print(rect.bottom()) # 320 (下边界y坐标) ``` 3. **几何属性计算** ```python width = rect.width() # 200 = right - left height = rect.height() # 200 = bottom - top area = rect.area() # 40000 = width * height ``` 4. **与OpenCV兼容** - 可与 `cv2.rectangle()` 无缝协作(见引用[2][3]): ```python cv2.rectangle(image, (rect.left(), rect.top()), (rect.right(), rect.bottom()), (0,255,0), 2) ``` --- #### 二、典型应用场景 1. **目标检测结果表示** dlib人脸检测器返回 `dlib.rectangle` 对象列表(引用[2]): ```python detector = dlib.get_frontal_face_detector() faces = detector(image_gray) # 返回dlib.rectangle列表 ``` 2. **目标跟踪初始化** `correlation_tracker` 通过矩形框初始化(引用[4]): ```python tracker = dlib.correlation_tracker() tracker.start_track(image, dlib.rectangle(100, 120, 300, 320)) ``` 3. **人脸关键点定位** `shape_predictor` 在矩形区域内预测关键点(引用[3]): ```python predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") shape = predictor(image, face_rect) # face_rect为dlib.rectangle ``` --- #### 三、创建与转换方法 | **创建方式** | **示例代码** | **说明** | |--------------|--------------|----------| | 直接构造 | `rect = dlib.rectangle(100, 120, 300, 320)` | 指定四个边界值 | | 从OpenCV格式转换 | `rect = dlib.rectangle(x, y, x+w, y+h)` | OpenCV的 `(x,y,w,h)` → `dlib.rectangle` | | 从边界列表转换 | `rect = dlib.rectangle(*[100, 120, 300, 320])` | 解包列表参数 | --- #### 四、几何操作函数 ```python # 移动矩形位置 new_rect = dlib.move_rect(rect, x_offset=10, y_offset=-5) # 缩放矩形尺寸 scaled_rect = dlib.resize_rect(rect, scale_factor=1.2) # 计算两矩形交集 overlap = rect1.intersect(rect2) # 检查点是否在矩形内 contains_point = rect.contains(dlib.point(150, 200)) ``` --- #### 五、最佳实践 1. **坐标边界校验** 避免坐标越界: ```python rect = dlib.rectangle( max(0, left), max(0, top), min(image_width, right), min(image_height, bottom) ) ``` 2. **与深度学习框架交互** 转换为PASCAL VOC格式(左上x, 左上y, 右下x, 右下y): ```python voc_box = [rect.left(), rect.top(), rect.right(), rect.bottom()] ``` 3. **多目标处理** 合并重叠矩形(如NMS后处理): ```python merged_rect = dlib.rectangle() dlib.find_candidate_object_locations(image, merged_rect, min_size=50) ``` --- ### 总结 `dlib.rectangle` 的核心价值在于: 1. **轻量高效**:仅存储4个整数坐标,计算开销低 2. **接口统一**:完美适配 dlib 的检测、跟踪、关键点模块 3. **跨库兼容**:与 OpenCV/Numpy/PyTorch 等生态无缝协作
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值