感興趣區域(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;
}

運行結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM