1. 程式人生 > >《OpenCV3程式設計入門》——5.2.1 感興趣區域ROI

《OpenCV3程式設計入門》——5.2.1 感興趣區域ROI

定義ROI區域有兩種方法:

第一種:使用表示矩形區域的Rect。指定矩形的左上角座標(建構函式的前兩個引數)和矩形的長寬(建構函式的後兩個引數)。

imageROI = image(Rect(500, 250, logo.cols, logo.rows));

第二種:指定感興趣行或列的範圍(Range)。Range是從起始索引到終止索引(不包括終止索引)的一連續序列。CRange可以用來定義Range。

imageROI = image(Range(250, 250+logoImage.rows), Range(200, 200+logoImage.cols));

下邊用一個例子來說明ROI的用法。例子是利用ROI將一幅圖加到另一幅圖的指定位置。 

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

void main(){
    //讀入影象並顯示影象
    Mat srcImage = imread("dota_pa.jpg");
    Mat logoImage = imread("dota_logo.jpg");
    if (!srcImage.data)
        cout << "讀取srcImage錯誤!" << endl;
    imshow("dota_pa原始圖", srcImage);

    if (!logoImage.data)
        cout << "讀取logoImage錯誤!"<< endl;
    imshow("dota_logo原始圖",logoImage);

    //定義一個Mat型別並給其設定ROI區域
    Mat imageROI = srcImage(Rect((srcImage.cols - logoImage.cols), 
                   (srcImage.rows - logoImage.rows), logoImage.cols, logoImage.rows));

    //載入掩模板(灰度圖就可以)
    Mat mask = imread("dota_logo.jpg", 0);

    //將掩膜複製到ROI
    logoImage.copyTo(imageROI, mask);
    
    //顯示結果
    namedWindow("<1>利用ROI實現影象疊加例項視窗");
    imshow("<1>利用ROI實現影象疊加例項視窗", srcImage);

    waitKey(0);
}

執行結果:

上述程式碼關於copyTo函式的用法,可參考博文OpenCV中copyTo()函式及Mask詳解(附程式碼詳解)