滑动条是OpenCV动态调节参数特别好用的一种工具,它依附于窗口而存在。由于OpenCV没有实现按钮功能,所以很多时候,我们可以用仅含0-1的滑动条来实现按钮的按下于弹起效果。
1、创建滑动条:createTrackbar()函数
这个函数往往和一个回调函数配合起来使用。
C++ : int createTrackbar(const string & trackbarname, const string & winname, int* value, int count, TrackbarCallback onChange=0, void* userdata=0);
参数说明:
(1)第一个参数,轨迹条的名称;
(2)第二个参数,窗口名称;
(3)第三个参数,表示滑块的初始位置
(4)第四个参数,表示滑块可达到的上限值。
(5)第五个参数,这是一个执行回调函数的指针,当滑块位置变化时候这个函数都进行回掉。这个函数原型必须为:void XXXX(int,void*),其中第一个为轨迹位置,第二个为用户数据。NULL表示没有回调函数。
(6)用户传给回掉函数的数据,用来处理轨迹时间。如果使用第三个参数value实参是全局变量的话,完全可以不用去管这个userdata参数。
一下通过一个实验来演示滑动条的使用:
首先定义和实现回调函数,形参有两个,一个是接收滑动条当前的位置,另一个是目标显示图像。这个回调函数是用来响应滑动条事件。传入的主要参数就是当前滑动条位置。
然后创建一个滑动条,按照函数接口定于填入参数。
当运行程序的时候,滑动条被初始化并且被创建,我们可以拨动滑动条的位置,此时滑动条的回调函数被调用,执行响应操作。把滑动条的值设置成图像的灰度值进行调节。
// Trackbar.cpp: 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp> using namespace cv; #define WINDOW_NAME "【滑动条示例】" void on_Trackbar(int pos, void *dstImage)
{
Mat *temp = static_cast<Mat*>(dstImage);
temp->setTo(pos);
imshow(WINDOW_NAME,*temp);
} int main(int argc,char** argv)
{
int initpos = ;
int maxpos = ;
Mat dstImage = Mat(,,CV_8SC1);
namedWindow(WINDOW_NAME,);
char TrackBarName[];
memset(TrackBarName,'\0',sizeof(TrackBarName));
sprintf_s(TrackBarName,"灰度值");
createTrackbar(TrackBarName,WINDOW_NAME,&initpos,maxpos,on_Trackbar,&dstImage);
waitKey();
return ;
}