openCV學習筆記-ROI區域的操作
阿新 • • 發佈:2019-02-07
#include<opencv2/opencv.hpp> #include<opencv2/highgui/highgui.hpp> #include<iostream> using namespace cv; using namespace std; //函式宣告 bool ROI_AddImage(); /* ========== 主函式 ========== */ int main(int argc, char** argv) { ROI_AddImage(); return 0; } bool ROI_AddImage() { //讀入影象 Mat srcImage = imread("boy.jpg"); Mat logo = imread("logo.jpg"); if (srcImage.empty()) { cout<<"讀取原圖錯誤!"<<endl; return false; } if (logo.empty()) { cout<<"讀取logo錯誤!"<<endl; } //.定義Roi區域 Mat imageROI = srcImage(Rect(50,50,logo.cols,logo.rows)); Mat mask = imread("logo.jpg",0);//載入logo灰度圖 //將掩膜複製到RoiImage logo.copyTo(imageROI, mask); //顯示 imshow("result",srcImage); waitKey(0); return true; }
感性區域:ROI (region of interest).設定感性興趣,用來專注或者簡化工程。就是圈定一個指定的區域,作為分析和關注度重點。就是需要處理的區域,好處是這樣可以減少計算的時間,增加精度。
然後定義一個roi方法有如下兩種:
Mat imageROI;
1.法一:imageROI = srcImage(Rect(50,50,logo.cols, logo.rows));
2.法二:imageROI = sreIamge(Range(50,logo.rows+50), Range(50, logo.cols));
實現的函式流程是載入兩張定義圖片到srcImage和logo中, 然後定義Mat類的imageROI,並且使用Rect設定了感性區域,把srcImage 和imageROI關聯了起來。接著讀入logo的灰度圖mask,最後把mask copy 到imageROI中。
ROI線性混合的操作bool ROI_AddImage_line() { //讀入影象 Mat srcImage = imread("boy.jpg"); Mat logo = imread("logo.jpg"); if (srcImage.empty()) { cout<<"讀取原圖錯誤!"<<endl; return false; } if (logo.empty()) { cout<<"讀取logo錯誤!"<<endl; } //.定義Roi區域 Mat imageROI = srcImage(Rect(50,50,logo.cols,logo.rows)); addWeighted(imageROI,0.5, logo, 0.5, 0.0, imageROI); //顯示 imshow("result",srcImage); waitKey(0); return true; }