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;
}
注意:变量不要重命名,图片路径要正确。