gpt4 book ai didi

opencv - 一个回调的多个 slider

转载 作者:太空宇宙 更新时间:2023-11-03 20:46:37 25 4
gpt4 key购买 nike

是否可以创建一些 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com