#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:
运行结果:
元