#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;
}
原圖像: