定義感興趣區域

#include "mainwindow.h"
#include <QApplication>
#include "iostream"
#include<opencv2/imgproc/imgproc.hpp>
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace std;
using namespace cv;
void add_logo(Mat & image, Mat & logo)
{
    //定義了一個感興趣區域(ROI), 它是在image圖像上座標爲(0,0), 長寬爲logo.rows, logo.cols 的矩形;
    //且image_ROI與原圖像的對應區域是共享一個內存,所以一切對image_ROI的操作,都是對原圖像的操作。
    Mat image_ROI = image( Rect(0, 0, logo.cols, logo.rows) );
    //第二種定義方法:Mat image_ROI = Rect(image, 0, 0, logo.cols, logo.rows) );
    //logo.copyTo(image_ROI);
    //addWeighted(image_ROI, 1.0, logo, 0.3, 0. , image_ROI); //相當於image_ROI = image_ROI * 1.0 + logo * 0.3 + 0
}
//利用掩模(必須是灰度圖)
void add_logo_2(Mat & image, Mat & logo)
{
        //定義了一個感興趣區域(ROI), 它是在image圖像上座標爲(0,0), 長寬爲logo.rows, logo.cols 的矩形;
        //且image_ROI與原圖像的對應區域是共享一個內存,所以一切對image_ROI的操作,都是對原圖像的操作。
        Mat image_ROI = image( Rect(0, 0, logo.cols, logo.rows) );
        //第二種定義方法:Mat image_ROI = Rect(image, 0, 0, logo.cols, logo.rows) );
        Mat mask = imread("C:\\Users\\11830\\Desktop\\f.png", 0);//第二個參數 =0 表示返回灰度圖
//        namedWindow("xixi");
//        imshow("xixi", mask);
        logo.copyTo(image_ROI, mask);
}
int main(int argc, char *argv[])
{
    Mat image = imread("C:\\Users\\11830\\Desktop\\a.jpg");
    if(!image.data)
    {
        cout << "圖像讀入有誤" <<endl;
        return -1;
    }
    Mat logo = imread("C:\\Users\\11830\\Desktop\\f.png");
    if(!logo.data)
    {
        cout << "圖像讀入有誤" <<endl;
        return -1;
    }
    add_logo_2(image, logo);
    namedWindow("logo");
    imshow("logo", image);
    waitKey();
    return 0;
}




原圖像:

logo:



運行結果:


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