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;
}
運行結果:




