opencv - 一个回调的多个 slider

标签 opencv callback slider trackbar

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

相关文章:

java - 为什么当调用带有回调的方法时我没有得到任何输出?

php - Google chrome 版本 84.0.4147.125(官方构建)(64 位)在重定向来自第三方的回调函数时破坏应用程序 session

javascript - 非常简单的 slider

opencv - 如何通过在python中使用pytesseract和opencv-python来识别其他较大对象下的变形文本?

image-processing - 比较轮廓

python - 错误:无法为使用PEP 517且无法直接安装的opencv-python构建轮子(在PATH中找不到cl)

c++ - 让 C 回调调用 C++ 成员函数的最佳方法?

css - 如何使这个 css3 slider 响应

javascript - 水平加速轮播滚动条

c++ - AVG 防病毒软件禁用了网络摄像头