opencv3学习笔记——第三章图像融合(带权重叠加)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38784454/article/details/81514056

图像融合要点:

        1、对于函数addWeighted (g_srcImage1,g_dAlphaValue,g_srcImage2,g_dBetaValue,0.0,g_dstImage) ,图像g_srcImage1与图像g_srcImage2大小要一致。

         2、滑动条对应变量g_nAlphaValueSlider的类型变化,全局变量声明的是int型,回调函数中由于int/int会取整,因此要转换为double型。

C++代码:

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#define WINDOW_NAME "【线性混合示例】"
using namespace cv;
using namespace std;
const int g_nMaxAlphaValue = 100;//alpha值得最大值
int g_nAlphaValueSlider;//滑动条对应的变量
double g_dAlphaValue;
double g_dBetaValue;

//声明存储图像的变量
Mat g_srcImage1;
Mat g_srcImage2;
Mat g_dstImage;

//回调函数on_Trackbar

void on_Trackbar(int, void*)
{
	//求出当前最大值相对于最大值比例
	g_dAlphaValue = (double)g_nAlphaValueSlider / g_nMaxAlphaValue;
	g_dBetaValue = 1.0 - g_dAlphaValue;

	//根据alpha与beta的值进行现行混合
	addWeighted(g_srcImage1,g_dAlphaValue,g_srcImage2,g_dBetaValue,0.0,g_dstImage);
	imshow(WINDOW_NAME, g_dstImage);
}

int main(int argc, char** argv)
{
	g_srcImage1 = imread("E:\\学习资料\\VS2013程序\\imgreadshow\\1.jpg");
	g_srcImage2 = imread("E:\\学习资料\\VS2013程序\\imgreadshow\\2.jpg");
	g_nAlphaValueSlider = 70;
	namedWindow(WINDOW_NAME, 1);
	char TrackBarName[50];
	sprintf(TrackBarName, "透明度值 %d", g_nMaxAlphaValue);
	createTrackbar(TrackBarName,WINDOW_NAME,&g_nAlphaValueSlider,g_nMaxAlphaValue,on_Trackbar);
	on_Trackbar(g_nAlphaValueSlider, 0);
	waitKey(0);
	return 0;
}

注意:变量不要重命名,图片路径要正确。

猜你喜欢

转载自blog.csdn.net/qq_38784454/article/details/81514056