感兴趣区域(ROI)

ROI

简介

  • 有时,我们只对一幅图像中的部分区域感兴趣,而原图像又十分大,如果带着非感兴趣区域一次处理,就会对程序的内存造成负担,因此,我们希望从原始图像中截取部分图像后再进行处理。我们将这个区域称作感兴趣区域(Region of Internet,ROI)。

  • 从原图中截取部分内容,就是将需要截取的部分在原图像中的位置标记出来,可以用 Rect 数据结构标记,也可以用 Range 数据结构标记

API

Rect(T x,T y,T width,T height)
cv::Range(int start, int end)
  • T:数据类型,C++模板特性,可以用int、double、float等替换
  • x:矩形区域左上角第一个像素的 x 坐标,也就是第一个像素的列数
  • y:矩形区域左上角第一个像素的 y 坐标,也就是第一个像素的行数
  • width:矩形的宽,单位为像素,即矩形跨越的列数
  • height:矩形的高,单位为像素,即矩形区域跨越的行数
  • start:区间的起始
  • end:区间的结束

:如在 img 中截取图像,可以用代码 img(Rect(p.x, p.y, width, height))实现;Range 只是表明一个区间范围,可以通过命令img(Range(rows_start, rows_end), Range(cols_start, cols_end))实现

实例代码:

#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;

int main()
{
    Mat3b img = imread("/home/kslas/OpenCV/lena.tif");
    Mat3b crop = imread("/home/kslas/OpenCV/test.png");
    imshow("Original1", img);
    imshow("Original2", crop);

    Rect rect(150, 80, 180, 200);
    Mat3b ROI1 = img(rect);
    Mat3b ROI2 = crop(Range(80, 280), Range(150, 330));

    ROI2.copyTo(ROI1);

    imshow("add ROI", img);
    imshow("ROI", ROI1);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

运行结果:

posted @ 2022-01-26 10:30  TNTksals  阅读(867)  评论(0编辑  收藏  举报