OPENCV学习笔记(4)---自学OPENCV---图像的混合

代码

先上代码。
我自学的方式是先看代码,然后在代码中遇到不懂的再逐个查询资料,深入学习,直到学懂。大家按照符合自己的方式学习就好了,适合自己的才是最好的。共勉。

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
	//线性混合操作    g = (1-c) * f1(x) + c * f2(x) ;  c的取值范围为0-1
	Mat src1, src2, dst1, dst2, dst3;
	src1 = imread("E:/minions.jpg");
	src2 = imread("E:/roothock.jpg");
	if (!src1.data)
	{
		cout << "error1" << endl;
		return -1;
	}
	if (!src2.data)
	{
		cout << "error2" << endl;
		return -1;
	}

	namedWindow("原图1", WINDOW_AUTOSIZE);
	imshow("原图1", src1);
	namedWindow("原图2", WINDOW_AUTOSIZE);
	imshow("原图2", src2);


	double alpha = 0.5;
	if(src2.rows==src1.rows&&src1.cols==src2.cols)
	{
		//addWeighted(inputArrary src1, double alpha,      inputArrary src2,   double beta,         double gamma,  outputArrat dst,      int dtype)
		//             输入图像1        输入图像1的alpha值     输入图像2        输入图像2的alpha的值  gramma的值     输出混合图像       dtype默认为-1
		//两张图像必须大小类型都相同才可以

		addWeighted(src1, alpha, src2, (1.0 - alpha), 0.0, dst1);//dst为重构的图片

		add(src1, src2, dst2, Mat());//只是像素相加  不如前一个
		multiply(src1, src2, dst3, 1.0);//只是像素相乘  不如前两个

		
		namedWindow("加权结果", WINDOW_AUTOSIZE);
		imshow("加权结果", dst1);

		namedWindow("像素相加结果", WINDOW_AUTOSIZE);
		imshow("像素相加结果", dst2);

		namedWindow("像素相乘结果", WINDOW_AUTOSIZE);
		imshow("像素相乘结果", dst3);
	}
	else
	{
		cout << "error" << endl;
		return -1;
	}
	
	waitKey(0);	
	return	0;
}

代码解释

之前已经解释过具体功能的代码就不进行解释了,如果想了解的话可以看下我之前的文章,毕竟咱们是在不断学习的过程中,要牢记旧知识,不断学习新知识。

addWeighted(src1, alpha, src2, (1.0 - alpha), 0.0, dst1);

addWeighted的功能是实现 src1和src2的加权和,具体的参数如下:addWeighted(输入图像1, 输入图像1的alpha值,输入图像2,输入图像2的alpha的值,gramma的值,输出混合图像,dtype默认为-1)。图像的alpha是指:图像数组元素的权重;gramm是指加在每个元素权重和上的标量,dtype(可选)是指输出图像的深度,当两个输入图像的深度相等时,可以使dtype = -1,即输出图像的深度等于输入图像的深度(src1.depth())。

各种处理后的结果图片对比:

可以看出经过简单的像素相加( add(src1, src2, dst2, Mat()) )、像素相乘( multiply(src1, src2, dst3, 1.0) )、
像素的加权和(addWeighted(src1, alpha, src2, (1.0 - alpha), 0.0, dst1) )处理后的图像的不同表现。
在这里插入图片描述这篇opencv的学习笔记就这样结束了。
我是一个初学者,如果有相关的问题大家可以评论提出一起讨论,或指出我的错误之处,大家一起学习,一起进步,谢谢啦。

猜你喜欢

转载自blog.csdn.net/weixin_41963310/article/details/103230561