首页 > 其他分享 >OpenCV(cv::Rect)

OpenCV(cv::Rect)

时间:2024-08-28 14:25:47浏览次数:8  
标签:50 OpenCV Rect 左上角 矩形 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 图像处理中的重要类之一,其灵活性使得它能够适应不同的任务需求。



标签:50,OpenCV,Rect,左上角,矩形,cv,rect
From: https://www.cnblogs.com/keye/p/18384595

相关文章

  • OpenCV(cv::Point、cv::Rect、cv::Mat)
    目录1.cv::Point1.1主要属性:1.2示例:1.3用途:2.cv::Rect2.1主要属性:2.2主要方法:2.3示例:2.4用途:3.cv::Mat3.1主要属性:3.2主要方法:3.3示例:3.4用途:4.总结在OpenCV中,cv::Point、cv::Rect和cv::Mat是三个非常常用的类,分别用于表示点、矩形和图像/矩阵数据。下面是它......
  • OpenCV(cv::calcHist())
    目录1.函数定义2.示例3.功能说明4.典型应用cv::calcHist()是OpenCV中用于计算图像或图像集合的直方图的函数。直方图是一个图像的像素值的分布统计,它表示图像中每个像素强度值的频率。1.函数定义cv::calcHist(constMat*images,intnimages,constint*channels,......
  • OpenCV 图像矫正技术深入探讨
    刚进入实验室导师就交给我一个任务,就是让我设计算法给图像进行矫正。哎呀,我不太会图像这块啊,不过还是接下来了,硬着头皮开干吧!那什么是图像的矫正呢?举个例子就好明白了。我的好朋友小明给我拍了这几张照片,因为他的拍照技术不咋地,照片都拍得歪歪扭扭的,比如下面这些照片:人民......
  • OpenCV Mat和IplImage访问像素的方法总结
    在opencv的编程中,遍历访问图像元素是经常遇到的操作,掌握其方法非常重要,无论是Mat类的像素访问,还是IplImage结构体的访问的方法,都必须扎实掌握,毕竟,图像处理本质上就是对像素的各种操作,访问元素就是各种图像处理算法的第一步。首先先看看图像的是怎么存储的。单通道图像多......
  • CSEC:香港城市大学提出SOTA曝光矫正算法 | CVPR 2024
    CSEC:香港城市大学提出SOTA曝光矫正算法|CVPR2024 在光照条件不佳下捕获的图像可能同时包含过曝和欠曝。目前的方法主要集中在调整图像亮度上,这可能会加剧欠曝区域的色调失真,并且无法恢复过曝区域的准确颜色。论文提出通过学习估计和校正这种色调偏移,来增强既有过曝又有欠......
  • CSEC:香港城市大学提出SOTA曝光矫正算法 | CVPR 2024
    在光照条件不佳下捕获的图像可能同时包含过曝和欠曝。目前的方法主要集中在调整图像亮度上,这可能会加剧欠曝区域的色调失真,并且无法恢复过曝区域的准确颜色。论文提出通过学习估计和校正这种色调偏移,来增强既有过曝又有欠曝的图像。先通过基于UNet的网络推导输入图像的增亮和变暗......
  • FlexAttention:解决二次复杂度问题,将大型视觉语言模型的输入提升至1008 | ECCV 2024
    \({\ttFlexAttention}\)是一种旨在增强大型视觉语言模型的方法,通过利用动态高分辨率特征选择和分层自注意机制,使其能够有效地处理并从高分辨率图像输入中获得优势,\({\ttFlexAttention}\)在性能和效率方面超越了现有的高分辨率方法。来源:晓飞的算法工程笔记公众号论文:F......
  • C# reflection slower 2.19X+ than direct
    usingSystem.Diagnostics;usingSystem.IO;usingSystem.Reflection;usingSystem.Text;namespaceConsoleApp58{internalclassProgram{staticList<Book>booksList{get;set;}staticvoidMain(string[]args){......
  • Yololov5+Pyqt5+Opencv 实时城市积水报警系统
    在现代城市生活中,积水问题不仅影响交通和人们的日常生活,还可能对城市基础设施造成潜在的威胁。为了快速、准确地识别和应对积水问题,使用计算机视觉技术进行智能积水检测成为一个重要的解决方案。在这篇博客中,我将带你一步步实现一个基于YOLOv5的积水检测系统,帮助你轻松应对城市......
  • OpenCV(cv::circle())
    目录1.函数2.示例3.说明4.使用场景cv::circle()是OpenCV提供的一个函数,用于在图像上绘制圆形。它非常适用于在图像处理任务中标记特定的点或区域。这个函数具有多种参数,允许你根据需要控制圆的颜色、位置、半径和边界厚度。1.函数voidcv::circle(InputOutputArrayi......