06-图像混合(OpenCV)

本文深入探讨了图像处理中线性混合操作的理论与实践,详细介绍了addWeighted()、add()和multiply()等API函数的应用,通过代码演示了如何利用这些函数实现图像的按比例混合、直接相加和相乘,是理解图像融合技术不可或缺的资源。

知识点

  1. 理论-线性混合操作
  2. 相关API函数(addWeighted)
  3. 代码演示

理论

f0(x)为一幅图片,f1(x)为另一幅图片,g(x)为混合后的图片,f0(x)与f1(x)各自取不同的权重,(1-α)与α互补,不会超过255;
Alt

API

图像混合API:addWeighted();
参数1—图像矩阵对象1;
参数2—系数(与beta互补为1);
参数3—图像2;
参数4—系数;
参数5—gamma:校验值(如果alpha + beta <1则使用该值);
输出混合图像:

dst = saturate_cast<..>(src1 * alpha + src2 * beta + gamma);

addWeighted()

Code

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

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
	Mat src1, src2, dst;

	src1 = imread("C:\\Users\\hello\\Desktop\\1.jpg");
	src2 = imread("C:\\Users\\hello\\Desktop\\2.png");
	if (!src1.data)
	{
		cout << "could not load the image 1.jpg" << endl;
		return -1;
	}
	if (!src2.data)
	{
		cout << "could not load the image 2.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); //图像按比例混合
		//add(src1, src2, dst, Mat());                     //图像直接相加
		multiply(src1, src2, dst, 1.0);                    //图像向乘
		imshow("src1", src1);
		imshow("src2", src2);
		namedWindow("blend demo", CV_WINDOW_AUTOSIZE);
		imshow("blend demo", dst);
	}
	else
	{
		printf("could not blend image , the size of image is not same...\n");
		return -1;
	}
	waitKey(0);
	return 0;
}

扩展

addWeighted():图像按比例线性混合
add(): 图像直接相加
multiply(): 图像相乘

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值