Opencv基础入门笔记05

Opencv基础入门笔记05:addWeight与multiply

函数简介。

1.addWeighted
它这个函数能实现图像线性混合效果,就像是PPT的动画效果那样,两层图像融合在一起,注意叠加混合和线性混合是不同的线性混合是将两幅图融合在一起,朦朦胧胧那种
用到的数学公式:

在这里插入图片描述
其中,a为比例系数;f0(x),f1(x)为输入的两张图片对应的像素值。
两张图片的大小,类型,深度必须一致。

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

1、 第1个参数,输入图片1,

2、第2个参数,图片1的融合比例

3、第3个参数,输入图片2

4、第4个参数,图片2的融合比例

5、第5个参数,偏差

6、第6个参数,输出图片
话不多说,上一张图来看效果。
在这里插入图片描述
2.multiply()
这个函数,简单来讲,就是能实现大小,类型深度一致的两张图片其对应像素值相乘,

multiply(src1, src2, dst, 1.0);

src1,src2是输入的两张图片,dst为输出图片,后面的是double数据,我这里用1.0,演示与addWeight的区别。
效果图
在这里插入图片描述
发现两个函数实现的效果相差很远,其实是用像素的归一化函数可以解决。

以上两个实现效果的源码如下:

int main(int argc, char** argv) {
	Mat src1, src2, dst;
	src1 = imread("E:\\360downloads\\07.jpg");
	src2 = imread("E:\\360downloads\\08.jpg");
	if (!src1.data) {
		cout << "could not load image Linux Logo..." << endl;
		return -1;
	}
	if (!src2.data) {
		cout << "could not load image WIN7 Logo..." << endl;
		return -1;
	}

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

		imshow("flower1", src1);
		imshow("flower2", src2);
		namedWindow("blend demo", WINDOW_AUTOSIZE);
		imshow("blend demo", dst);
	}
	else {
		printf("could not blend images , the size of images is not same...\n");
		return -1;
	}

匆忙写个简单笔记复习,待更。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨夜※繁华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值