opencv-滑动条的创建与使用-实现两幅图片的线性混合

/createTrackbar函数用于创建一个可以跳整数值的滑动条并将滑动条附加到一个指定的窗口上,它往往和一个回调函数配合使用
(回调函数:一个通过函数指针调用的函数。如果我们把函数的指针作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,称其为回调函数。
int createTrackbar(const string& trackbarname,const string& winname,int
value,int count,TrackbarCallback onChang=0;voiduserdate=0);
(1)轨迹条的名字
(2)轨迹条依附窗口的名字
(3)一个指向整型的指针,表示滑块的位置,在创建时滑块的初始位置就是该变量当前的值。
(4)表示滑块可以达到的最大位置的值,滑块的最小位置始终为0.
(5)指向回调函数的指针
(6)用户传给回调函数的数据,用来处理轨迹条事件。如果第三个参数是全局变量,可以不用管这个参数
/

/利用滑动条控制两幅图像的Alpha混合/
#include “pch.h”
#include
#include <opencv2/opencv.hpp>
using namespace cv;

const int g_nMaxAlphaValue = 100;
int g_nAlphaValueSlider;
double g_dAlphaValue;
double g_dBetaValue;
Mat g_srcImage1;
Mat g_srcImage2;
Mat g_dstImage;
void on_Trackbar(int, void*)
{
g_dAlphaValue = (double)g_nAlphaValueSlider / g_nMaxAlphaValue;//求出当前alpha值相当于最大值的比例
g_dBetaValue= (1.0 - g_dAlphaValue);//beta值为1减去alpha
addWeighted(g_srcImage1, g_dAlphaValue, g_srcImage2, g_dBetaValue, 0.0, g_dstImage);//根据alpha值和beta值进行混合
imshow("[线性混合示例]", g_dstImage);//显示效果图

}

int main()
{
g_srcImage1 = imread(“C:/Users/csh/Desktop/2.jpg”);
g_srcImage2 = imread(“C:/Users/csh/Desktop/3.jpg”);//两幅图像的尺寸要相同
if (!g_srcImage1.data)
{
printf(“读取第一幅图片错误”);
return -1;
}
if (!g_srcImage2.data)
{
printf(“读取第二幅图片错误”);
return -1;
}
g_nAlphaValueSlider = 70;
namedWindow("[线性混合示例]", 1);
char TrackbarName[50];
sprintf_s(TrackbarName, “透明值 %d”, g_nMaxAlphaValue);
createTrackbar(TrackbarName, “[线性混合示例]”, &g_nAlphaValueSlider, g_nMaxAlphaValue, on_Trackbar);
waitKey(0);
return 0;
}

/获取当前轨迹条的位置getTrackbarPos()
int getTrackbarPos(const string&trackbarname,const string&winname);
(1)轨迹条的名字
(2)轨迹条的父窗口的名字
/
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44270056/article/details/86656165