实话说,创建一个滑动条和创建多个没啥区别。
具体说明和实现可以参照:OpenCV滑动条的使用详解
最近有个时域滤波的算法,具体实现封装在类函数里。其中有几个参数需要调节,突然想起滑动条这个工具,于是拿起来用了。
直接上代码:
回调函数实现部分:
void kMaxTemporalFilter(int, void *)
{
double d_kMax = (double)kMax/100;
//时域滤波
Algorithm::temporalFilter(currentImg, lastImg, d_kMax, dataMin, dataMax);
imshow("video", currentImg);
cv::waitKey(1);
}
主体函数调用部分:
cv::createTrackbar( "kMax : ","video", &kMax, 100, kMaxTemporalFilter);
kMaxTemporalFilter(0, 0);
cv::createTrackbar( "dataMin : ", "video", &dataMin, 200, kMaxTemporalFilter);
kMaxTemporalFilter(0, 0);
cv::createTrackbar( "dataMax : ", "video", &dataMax, 200, kMaxTemporalFilter);
kMaxTemporalFilter(0, 0);
由于同时有三个调节参数,索性直接建立三个滑动条,可以同时运行,打断点也确认参数起效。
注意:
-
(1)在调用函数createTrackbar时,一定要注意参数顺序,否则会报错;尤其是 trackbarname和winname顺序;
-
(2)由于滑动条调用参数似乎指定Int,如果函数需求double等类型,可在内部自行再次转换,参照这句:
double d_kMax = (double)kMax/100;
createTrackbar函数声明部分,第三参数要求int类型:
CV_EXPORTS int createTrackbar(const String& trackbarname, const String& winname,
int* value, int count,
TrackbarCallback onChange = 0,
void* userdata = 0);
本次调用窗口截图:
元宵快乐~