两张图片的叠加

在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;
}


你可能感兴趣的:(两张图片的叠加)