【OpenCV】OpenCV函數精講之 -- 感興趣區域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詳解(附代碼詳解) 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章