opencv入门学习(2)——Adding (blending) two images using OpenCV

目标:

  • 什么是线性融合,有什么用
  • 如何使用addweighted() 将两个图像融合

理论:

这个操作是将两幅图像或者两段视频进行交叉,具体的公式是

g(x)=(1-\alpha )f_{0}(x)+\alpha f_{1}(x)         其中\alpha的范围是0-1

具体的代码如下:

#include <iostream>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;

int main(void) {
	double alpha = 0.5;
	double beta, input;
	Mat src1, src2, dst;
	cout << "Simple Linear Blender" << endl;
	cout << "*Enter alpha [0.0-1.0]" << endl;
	cin >> input;

	if (input >= 0.0&&input <= 1.0)
		alpha = input;
	src1 = imread("data/LinuxLogo.jpg");
	src2 = imread("data/WindowsLogo.jpg");
	if (src1.empty()) { cout << "Error loading src1" << endl; return -1; }
	if (src2.empty()) { cout << "Error loading src2" << endl; return -1; }

	beta = (1.0 - alpha);
	addWeighted(src1, alpha, src2, beta,0.0,dst);
	imshow("Linear Blend", dst);
	waitKey(0);

	return 0;
}

这段代码,是将将两幅图片融合成一幅图片,根据两幅图片所占权重的不同,也就是alpha和beta的值不同,会有不同的效果。

这里的addWeighted()是程序的关键,他产生如下结果:

                                                                               dst=α⋅src1+β⋅src2+γ

这一操作是对于src1和src2的每一个像素点的像素值都是进行权重相加得到的结果。所以要求src1和src2的size相同。

 

我们使用src1和src2的原图分别是linux和windows的logo

对于三个参数α、β、γ,我们先以0.5,0.5,0输入得到的结果如下。

 

对于γ的值来说,数值越大,融合后的图像越白,为0则代表不对融合后的图像做任何改动。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值