opencv第5课图像的合并

   今天我们来记录下opencv的图像的混合效果,也是更加理解图片如何处理的。

目录

图片资源准备:  

 图片混合的原理:

代码部分:

结果图:


图片资源准备:  

首先我们先准备了两张图片:

   

 

 图片混合的原理:

      我们知道图片存储的是矩阵,你可以理解成编程中的二维数组,比如上面的图片是RGB图片,R 为红,G为绿,B为蓝

每个 R 、G、 B 都是 uchar类型,数据量都是为0~255,在图片中位置是 数据 是 B G R的存储顺序。懂数据存储都能明白

这个原理,这里不再细讲了。RGB三个uchar组合成了一个图片的一个像素。注意:这里是RGB图片,还有黑白,等其它图

片存储的是不同的,有兴趣的同学们可以查阅相关资料

     先说明一下,这两张图的大小是一样的,因为要 进行矩阵数据的操作!  啥,你说你不会矩阵的操作,去看看线性代数,

或者高等代数,以后别再说学数学没什么用了!

    公式:   

     其中 α 取值 [0,1], 这里是0到1,别学编程时间长了,就认为是0 ,1.(乱棍打死), 给g(x) 为新的矩阵,f0  , f1

分别两个图片的存储的数据量。通过一个线性变化装换成一个新的矩阵。

    opencv 中提供了一个函数:

   

 

代码部分:

// opencv00005.cpp : 定义控制台应用程序的入口点。
//

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

using namespace std;
using namespace cv;

int main()
{
	double alpha = 0.5; //α系数 
	double beta; // β系数
	double input; 
	//分别存储三个图片矩阵数据,dst存储的是两张图片的混合结果
	Mat src1, src2, dst; 
	cout << " Simple Linear Blender " << endl;
	cout << "-----------------------" << endl;
	cout << "* Enter alpha [0-1]: ";
	cin >> input;
	if (input >=0 && input <= 1)
	{
		alpha = input;
	}
	src1 = imread("D:/images/3.jpg");
	src2 = imread("D:/images/4.jpg");

	if (src1.empty()) { cout << "Error loading src1" << endl; return -1; }
	if (src2.empty()) { cout << "Error loading src2" << endl; return -1; }

	beta = 1 - alpha;

	addWeighted(src1, alpha, src2, beta, 0.0, dst); //图片合成的
	namedWindow("out put", CV_WINDOW_AUTOSIZE);
	imshow("out put", dst);

	waitKey(0);
    return 0;
}

结果图:

这样就完成了两个图片的合成。

小伙伴们理解了吗,咱们可以让图片矩阵乘上一个系数[0,1 ]的范围,看看图片是什么效果。

Mat stt;
	stt = src1 * 0.3;
	namedWindow("new pic", CV_WINDOW_AUTOSIZE);
	imshow("new pic", stt);

 

小伙伴们,现在是不是更好理解图片的基本操做了,哈哈哈,喜欢本文章的记得点个赞,大家一起来快乐的学习。 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值