《OpenCV3程式設計入門》——5.2.1 感興趣區域ROI
阿新 • • 發佈:2018-12-04
定義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詳解(附程式碼詳解)