【opencv学习笔记】006之图像混合 addWeighted()函数详解

目录

一、前言

二、图像混合

1、什么是图像混合

1.图像混合介绍

2.算法原理

2、API:addWeighted()

1.函数原型

2.API参数解释

三、全部代码及结果展示

1、代码

2、运行效果图


一、前言

欠下的总是要还的,继续给大家更新有关于OpenCV的教程。

为什么每次开头都要先说这么一句话呢,就是为了激励自己,做一件事,不要拖,好好认认真真做下去,真的欠下的总是要还的。

今天要讲的是图像混合。

二、图像混合

1、什么是图像混合

1.图像混合介绍

图像混合就是将两个尺寸一样的图像按照一定的比例混合到一起,比如我们配置颜料,我们也是按照一定的比例去配置,所有的比例之和为1。

2.算法原理

注:所有图像处理,都是有数学原理的,当数学原理比较简单的时候,我会讲解给大家,让大家能够在使用好opencv的基础上尽可能多的掌握基本原理,这有助于我们学习opencv,但是如果理论太难,让大家对opencv产生恐惧心理,慢慢厌倦反而适得其反。所以简单的理论我会讲给大家。深入的原理,等写完学习笔记,以后我会尽量专门写博客来讲图像处理原理。

我们用函数来表示一个图像,前提是所有的图像尺寸是一样的,即图像矩阵的行列一样,通道数一样。

我们用 f0(x) 和 f1(x) 来表示输入的图像,用 g(x) 来表示输出图像,α表示比例( 0≤α≤1 ,一般来说,α取0和1没有太大意义),那我们能得到如下图所示的一个公式。

所以图像混合就是将两个图像按照一定的比例转存到另一个图像中。

2、API:addWeighted()

1.函数原型

下面就是我们本博客要用到的API啦

CV_EXPORTS_W void addWeighted(
    InputArray src1, 
    double alpha, 
    InputArray src2,                     
    double beta,
    double gamma, 
    OutputArray dst, 
    int dtype = -1
);

2.API参数解释

下面是对应参数的介绍:

参数1:输入图像Mat – src1

参数2:输入图像src1的alpha值(所占比重)

参数3:输入图像Mat – src2

参数4:输入图像src2的beta值(所占比重)

参数5:gamma值

参数6:输出混合图像

参数7:默认参数

注意点:两张图像的大小和类型必须一致才可以。

三、全部代码及结果展示

1、代码

代码比较简单,就不分块讲解了。直接分享给大家:

#include 
#include 

using namespace std;
using namespace cv;

int main(int argc, char** argv) {
	Mat src1, src2, dst;
	src1 = imread("E:/image/Boy.png");
	src2 = imread("E:/image/Girl.png");
	if (!src1.data) {
		cout << "could not load image which named boy.png..." << endl;
		return -1;
	}
	if (!src2.data) {
		cout << "could not load image named girl.png..." << endl;
		return -1;
	}

	double alpha = 0.5;
	if (src1.rows == src2.rows && src1.cols == src2.cols && src1.type() == src2.type()) {
		 addWeighted(src1, alpha, src2, (1.0 - alpha), 0.0, dst);
		// multiply(src1, src2, dst, 1.0);

		imshow("Boy", src1);
		imshow("Girl", src2);
		imshow("Boy and Girl", dst);
	}
	else {
		printf("could not blend images , the size of images is not same...\n");
		return -1;
	}

	waitKey(0);
	return 0;
}

2、运行效果图

因为最近新版倚天屠龙记很火,而且我也是一个金庸粉,倚天屠龙记是我的最爱,所以用了新版男主和女主的照片来做图像混合,将两个人结合到一起。大家可以直接右键保存图像做这个代码。

 运行结果如下图:

【opencv学习笔记】006之图像混合 addWeighted()函数详解_第1张图片 新版张无忌
【opencv学习笔记】006之图像混合 addWeighted()函数详解_第2张图片 新版赵敏
【opencv学习笔记】006之图像混合 addWeighted()函数详解_第3张图片 敏敏与无忌

 

今天的内容就讲到这里啦,有什么问题,大家可以在下面留言哦!

你可能感兴趣的:(opencv,C/C++,计算机视觉,图像混合,addWeighted,图像尺寸)