OpenCV-学习历程5- 线性混合操作(将两张图片融合在一起)(理论+代码)

OPENCV系列博客主要记录自己学习OPENCV的历程,以及存储已经实现的代码,以备后续回顾使用,代码中包含了主要的备注。

 一.线性组合原理

  1. 线性混合就是,对两幅图像 f0(x)和 f1(x)或两段视频(同样为(f0(x)和f1(x))产生时间上的画面叠化(cross-dissolve)效果,就像幻灯片放映和电影制作中的那样。函数表示为。
  2. 不同的像素采用不同的权重(在API中,alpha和beta对应着两幅图像的权重,gamma是校验值)
  3. Saturate这个函数,确保图像的灰度范围不会超过0~255区间

                                                                                                                               

                                                                      

二.线性组合代码及实验


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


using namespace std;
using namespace cv;

int main(int argc, char** argv) {
	
	//Step1 读取照片
	Mat src1, src2;
	src1 = imread("image1.jpg");
	src2 = imread("image2.jpg");

	if (src1.empty() || src2.empty()) {
		cout << "There is an empty image in the inputs: \n" << endl;
		return -1;
		}
	//Step2 显示原图(namedWindow可以省略,IDE会自动添加)
	imshow("Original_Image_1", src1);
	imshow("Original_Image_2", src2);

	//Step3 创建新图片,并且用addweighted函数,将两个图片拼接在一起
	//注意: 使用multiply/add函数也可以拼接图片,但是addweighted函数效果更好

	Mat dst;
	double alpha = 0.5; //50%比重


	if (src1.rows == src2.rows && src1.cols == src2.cols && src1.type() == src2.type()) {//判断两张图片是否具有同样的尺寸等属性
		addWeighted(src1, alpha, src2, (1 - alpha),0.0, dst);                            //(图1,图一比重,图二,图二比重,gamma,输出图)
		imshow("procressed_image",dst);	
	}
	else {
		cout << "These two images dont have same property, skipped.... \n" << endl;
		return -1;
	}

	
	waitKey();
	return 0;
}

最终效果为:

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值