OpenCV--图像混合叠加

1.图像的混合

图像的混合即把两张大小一样类型一致的图像合成一张图片。

(1)理论知识

线性混合操作的理论:

g(x)=(1-⍺)f₀(x)+⍺f₁(x) 

 其中⍺代表了每个图像占的权重,⍺的取值范围为0~1之间。通过对⍺值的调整可以使得两张图片得到更好的融合。

(2)相关api

使用addWeighted(cv::InputArray src1,    输入图像1

                          double alpha,            输入图像1的alpha值

                          cv::InputArray src2,    输入图像2                     

                          double beta,             输入图像2的alpha值

                          double gamma,         这个是校验值,默认为0

                          cv::OutputArray dst,   输出混合图像
                          int type=-1                

)
在编程过程中注意判断一下两张图片大小类型是否一致。核心演示代码如下:

/**********************************************************/
/*************图像混合叠加*************************/
/***使用 addWeighted 融合两张图片,大小分辨率必须一致,否则会出错*****/
void ImageAddLinear(void)
{
	Mat src1 = imread("E:/03OpenCV/PIC/a15.png");
	imshow("image1", src1);

	Mat src2 = imread("E:/03OpenCV/PIC/a16.png");
	imshow("image2", src2);

	double alpha = 0.5;
	double beta;
	double inputValue = 0.5;//改变此值可以得到不同的效果

	Mat src15, src16, dst;
	if (inputValue >= 0.0 && inputValue <= 1.0)
	{
		alpha = inputValue;
	}
	src15 = imread("E:/03OpenCV/PIC/a15.png");
	src16 = imread("E:/03OpenCV/PIC/a16.png");
	if (!src15.data) { printf("Error loading src15 \n"); return; }
	if (!src16.data) { printf("Error loading src16 \n"); return; }
	namedWindow("Linear Blend", 1);
	beta = (1.0 - alpha);
	addWeighted(src15, alpha, src16, beta, 0.0, dst);//
	imshow("Linear Blend", dst);

	imwrite("E:/03OpenCV/PIC/TestImageAddLinear.jpg", dst);//保存处理后的图片
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
效果还是不错的!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值