OpenCV(cv::Rect)



cv::Rect 是 OpenCV 中的一个用于定义矩形区域的类。它被广泛应用于图像处理任务中,如裁剪图像、绘制矩形或定义图像上的兴趣区域(ROI,Region of Interest)。矩形的定义依赖于左上角的点坐标以及矩形的宽度和高度。



1. 构造函数和用法

cv::Rect 类定义了多种构造函数,你可以用几种不同的方式创建矩形对象:

  1. 默认构造函数:

    cv::Rect rect;
    
    • 创建一个未初始化的矩形,所有参数默认为零。
  2. 通过坐标和大小创建矩形:

    cv::Rect rect(x, y, width, height);
    
    • xy: 矩形左上角的坐标。
    • width: 矩形的宽度。
    • height: 矩形的高度。

    示例:

    cv::Rect rect(50, 50, 100, 200);
    

    这将创建一个左上角位于 (50, 50),宽度为 100 像素,高度为 200 像素的矩形。

  3. 通过两个点创建矩形:

    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. 用途

  1. ROI 操作: 在图像处理中,cv::Rect 经常被用作定义感兴趣区域,用来进行图像裁剪、缩放或进一步处理。
  2. 目标检测: 在目标检测中,检测到的对象通常用矩形框进行标记,cv::Rect 可以存储这些边界框的信息。
  3. 图像处理与分析: 矩形在一些基于块的图像处理算法中被广泛使用,比如分块处理。

cv::Rect 是 OpenCV 图像处理中的重要类之一,其灵活性使得它能够适应不同的任务需求。



posted @   做梦当财神  阅读(1053)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示