函数说明
createTrackbar()函数的函数原型为:
CV_EXPORTS int createTrackbar(const String& trackbarname, const String& winname,int value, int count,TrackbarCallback onChange = 0, void userdata = 0);
参数1:滚动条名称;
参数2:窗口名称
参数3:滚动条初始位置
参数4:滚动条最大值;
参数5:回调函数名字
参数6:用户传给回调函数的数据,用来处理轨迹条事件。
示例
createTrackbar("变量1:", "图片处理窗口", &pos, maxValue, onChangeTrackBar, &image);
1个滑动条示例
// 回调函数
void onChangeTrackBar(int pos, void* usrdata)
{
// 传递用户数据(你也可以全局变量加个src)
Mat src = *(Mat*)(usrdata);
// 定义目标对象
Mat dst;
// 二值化
threshold(src, dst, pos, 255, 0);
imshow("二值化", dst);
}
void track_bar_test() {
// 设置最大值
int maxValue = 255;
//读入图像
Mat src = imread("C:\\Users\\yl\\Desktop\\hakase.png", 1);
//新建窗口
namedWindow("二值化"); // 这几个窗口名都要一样,不然你控制这个 那个窗口变换,好奇怪喔。
//创建trackbar,把isrc作为数据传进回调函数中,要用引用传递
createTrackbar("阈值", "二值化", &pos1, maxValue, onChangeTrackBar, &src);
waitKey(0);
destroyAllWindows();
}
多个滑动条示例
// 如果想用两个控制条,必须用全局变量(因为回调函数的滑块位置,只有1个参数《不够用》)
int pos1 = 0;
int pos2 = 0;
// 回调函数
void onChangeTrackBar(int, void* usrdata)
{
// 传递用户数据(你也可以全局变量加个src)
Mat src = *(Mat*)(usrdata);
// 定义目标对象
Mat dst;
// 二值化
threshold(src, dst, pos1, 255, 0);
add(dst, Scalar(pos2, pos2, pos2), dst);
imshow("二值化", dst);
}
void track_bar_test() {
int maxValue = 255;
int maxValue2 = 255;
//读入图像
Mat src = imread("C:\\Users\\yl\\Desktop\\hakase.png", 1);
////新建窗口
namedWindow("二值化"); // 这几个窗口名都要一样,不然你控制这个 那个窗口变换,好奇怪喔。
//创建trackbar,我们把img作为数据传进回调函数中
createTrackbar("阈值", "二值化", &pos1, maxValue, onChangeTrackBar, &src);
createTrackbar("反色", "二值化", &pos2, maxValue2, onChangeTrackBar, &src);
waitKey(0);
destroyAllWindows();
}
其他参考
下面文章太长,但是我嫖了两眼,觉得应该还行,在这存一下
csdn :OpenCV滑动条