欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-21 23:19:16
...

图像融合要点:

        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;
}

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

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

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