滑动条创建和使用

前言

没有前言。

测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <string>
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;

void on_Trackbar(int, void*){
//Alpha和Beta值的比例
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,g_dstImage);

imshow("Trackbar Sample",g_dstImage);
}
int main(int argc,char** argv){
//图像尺寸必须相同!!!
g_srcImage1 = imread("Paint1.jpg");
g_srcImage2 = imread("Paint2.jpg");
if(!g_srcImage1.data) {
printf("Reading image 1 failed\n");
return -1;
}
if(!g_srcImage2.data) {
printf("Reading image 2 failed\n");
return -1;
}

g_nAlphaValueSlider = 70;

namedWindow("Trackbar Sample",1);

char TrakbarName[50];
sprintf(TrakbarName,"Alpha");

createTrackbar(TrakbarName,"Trackbar Sample",&g_nAlphaValueSlider,g_nMaxAlphaValue,on_Trackbar);

//运行时初始化界面
on_Trackbar(g_nAlphaValueSlider,0);

waitKey(0);

return 0;
}

效果图;
Alpha为0时:

Alpha为100时:

1.createTrackbar() 函数
函数原型:

1
2
3
4
5
6
7
8
int createTrackbar(
const string& trackbarname,
const string& winname,
int* value,
int count,
TrackbarCallback onChange=0,
void* userdata=0
)

第一个参数:轨迹条的名字
第二个参数:窗口的名字
第三个参数:int*类型的指针,指向滑块位置,创建时滑块的位置就是该变量当前的值
第四个参数:滑块能达到的最大位置的值
第五个参数:TrackbarCallback回调函数,默认为零,滑动条的每一次变化都会调用这个函数,函数原型必须是void XXX(int, void*),第一个参数是轨迹条的位置,第二个参数是用户传给回调函数的参数,如果第三个参数是全局变量的话,完全可以不用管第六个参数。
需要注意的是,读取的图像尺寸必须相同,不然会报错。
2.getTrackbarPos():获取滑动条的位置的值
函数原型:
1
2
3
4
int getTrackbarPos(
const string& trackbarname,
const string& winname
)