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