是否可以创建一些 slider 并为所有 slider 进行一次回调?
我正在创建一个窗口,我想在其中设置大约 10 个参数。为所有这些设置 1 个回调函数而不是 10 个函数会好得多。
目前我像这样创建轨迹栏:
cvCreateTrackbar("Var1","Window",&global_var1, 250, changing_var1);
cvCreateTrackbar("Var2","Window",&global_var2, 250, changing_var2);
然后
void changing_var1(int pos) {
global_var1 = pos;
}
void changing_var2(int pos) {
global_var2 = pos;
}
是否可以创建一个回调来根据我要更改的参数更改所有参数?
最佳答案
是的,您应该能够做到这一点(至少使用 C++ 接口(interface))。您将需要使用可选的 userData
字段。下面是一个关于如何完成此操作的小示例:
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace std;
using namespace cv;
struct ColorThresholdData
{
int redHigh;
int redLow;
};
enum ColorThresholdType
{
RED_HIGH,
RED_LOW
};
void fooCallback(int value, void* colorThreshold);
struct ColorThresholdData data;
int main(int argc, char** argv)
{
...
createTrackbar("red high", windowName, NULL, 255, fooCallback, new ColorThresholdType(RED_HIGH));
createTrackbar("red low", windowName, NULL, 255, fooCallback, new ColorThresholdType(RED_LOW));
...
}
void fooCallback(int value, void* colorThreshold)
{
ColorThresholdType* ct = reinterpret_cast<ColorThresholdType*>(colorThreshold);
switch(*ct)
{
case RED_HIGH:
cout << "Got RED_HIGH value" << endl;
data.redHigh = value;
break;
case RED_LOW:
cout << "Got RED_LOW value" << endl;
data.redLow = value;
break;
}
}
希望这就是您要找的:)
关于opencv - 一个回调的多个 slider ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12997441/