在opencv函数里通过调用addWeighted函数来叠加两张图片,但这里有2个条件:
1、两张图片Size相同
2、两张图片channels相同
如果两张不同的图片A和B,假设A的大小比B大,则这时要进行叠加的话,有如下几种思路:
1、将B的图片扩大到和A一样 或者 将A的图片缩减到和B一样,在进行叠加
2、可以在A的图片中找和B同样大的ROI区域,在这区域内叠加
以下为代码:
注意的是这里word图片比lena大,所以我在这里先进行了resize,在进行ROI的另一种方法时,掩码mask要是灰度图,因为其功能是在mask中不为0的位置,copyto原值,如果是添上一个商标之类的东西,其效果要比前者好
// a7.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <opencv245.h>
using namespace std;
using namespace cv;
int _tmain(int argc, _TCHAR* argv[])
{
Mat logo = imread("C:\\Users\\sony\\Desktop\\word.png");
resize(logo, logo, Size(200, 200));
Mat image = imread("C:\\Users\\sony\\Desktop\\pic\\Lena.jpg");
Mat imageROI = image(Rect(0, 0, logo.cols, logo.rows));
/*addWeighted(imageROI, 0.2, logo, 1, 0, imageROI);*/
Mat mask ;
cvtColor(logo, mask, CV_RGB2GRAY);
logo.copyTo(imageROI, mask);
imshow("1", image);
waitKey(0);
return 0;
}