一、Trackbar的创建方法
1.1 createTrackbar
OpenCV中使用createTrackbar()来创建滚动条,函数的使用方法如下:
createTrackbar(const String& trackbarname, const String& winname,int value, int count,TrackbarCallback onChange = 0,void userdata = 0);
| 位置 | 参数名 | 作用 |
|---|---|---|
| 1 | trackbar name | 滚动条的名字 |
| 2 | winname | 绑定的窗口名字 |
| 3 | value | 滑块的初始位置 |
| 4 | count | 滑块的最大位置 |
| 5 | TrackbarCallback | 回调函数,拨动Trackbar返回的函数 |
| 6 | userdata | 用户传给回调函数的数据,不用默认为0 |
1.2 回调函数
第五个参数回调函数TrackbarCallback,是指拨动Trackbar会产生一个事件,系统会捕捉这个事件,然后发送给相应的处理者,因此需要定义一个函数进行相应的处理。回调函数的定义规范如下:
void callbackfunc(int value, void* userdata);
value传入的是滑块位置变量。 userdata是打包的其他数据,可以通过如结构体的方法打包数据发送给回调函数。当createTrackbar函数最后一个参数为0时表示不使用userdata,这时可以通过全局变量为回调函数传递数据。
二、使用Trackbar调节图片亮度
//部分代码
static void onTrack(int lightness, void* data) {
Mat src = *(Mat*)data; //将void类型指针转换为Mat类型指针,然后再取数据
Mat m = Mat::zeros(src.size(), src.type());
Mat dst = Mat::zeros(src.size(), src.type());
m = Scalar(lightness, lightness, lightness);
add(src, m, dst);
imshow("Change Lightness", dst);
}
void MyDemo::checkBar_Demo(Mat& image) {
namedWindow("Change Lightness", WINDOW_AUTOSIZE);
int lightness = 50;
int max_value = 100;
createTrackbar("Value Bar", "Change Lightness", &lightness, max_value, onTrack,(void *)&image);//最后一个参数强制转换为void类型指针
onTrack(lightness, &image);
}

评论