滑动条的创建和使用
#include<opencv2/opencv.hpp>
#include"opencv2/highgui/highgui.hpp"
using namespace cv;
const String WINDOW_NAME = "【线性混合案例】";
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;
g_dBetaValue = 1.0 - g_dAlphaValue;
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("3.jpg");
g_srcImage2 = imread("4.jpg");
resize(g_srcImage1,g_srcImage1,Size(640, 640), 0, 0, CV_INTER_LINEAR);
resize(g_srcImage2, g_srcImage2, Size(640, 640), 0, 0, CV_INTER_LINEAR);
if (!g_srcImage1.data){ printf("读取第一张照片有误"); return-1; }
if (!g_srcImage2.data){ printf("读取第二张照片有误"); return-1; }
g_nAlphaValueSlider = 70;
namedWindow(WINDOW_NAME,1);
//在创建的窗体中创建一个滑动条控制
char TrackbarName[50];
sprintf(TrackbarName, "透明值 %d", g_dAlphaValue);//把格式化的数据写入某个字符串缓冲区
createTrackbar(TrackbarName,WINDOW_NAME,&g_nAlphaValueSlider,g_nMaxAlphaValue,on_Trackbar);
on_Trackbar(g_nAlphaValueSlider, 0);
waitKey(0);
return 0;
}
备注:
(1)创建滑动条:createTrackbar( )函数;往往会跟一个回调函数配合起来使用
int careateTrackbar(conststring& trackbarname,constring& winname, int* value,int count,TrackbarCallback onChange=0,void* userdata=0 )
第一个参数 【轨迹条的名字】
第二个参数【窗口的名字】
第三个参数,int*类型的value,是一个指向整型的指针,表示滑块的位置。
第四个参数,表示滑块能够达到的最大位置的值;
第五个参数,TrackbarCallback类型的onChange,它有默认值0;这是一个指向回调函数的指针,每次滑块位置改变时,这个函数就会进行回调。
第六个参数,void*类型的userdata,它有默认值0.这个参数是用户传给回调函数的数据,用来处理轨迹条事件。
【回调函数】就是一个通过函数指针调用的函数。如果我们把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,就称为回调函数。
(2) resize()函数;将两幅将要合成的图像尺寸变为指定的大小。
resize(g_srcImage1,g_srcImage1,Size(640, 640), 0, 0, CV_INTER_LINEAR);
(3)sprintf()函数,把格式化的数据写入摸个字符串缓冲区;