gpt4 book ai didi

c++ - 使用相同的回调函数opencv c++管理多个轨迹栏

转载 作者:行者123 更新时间:2023-12-02 16:51:25 30 4
gpt4 key购买 nike

我想知道在opencv中是否可以做这样的事情。我想在每个轨迹栏上调用相同的回调函数 onChange 并在 onChange() 提取中以某种方式调用 3 个 slider 中的一个更改。

cv::createTrackbar("bar_0", "window", &bSliderValue1, 100, onChange, (void*)&data);
cv::createTrackbar("bar_1", "window", &bSliderValue2, 100, onChange, (void*)&data);
cv::createTrackbar("bar_2", "window", &bSliderValue3, 100, onChange, (void*)&data);

onChange 函数是这样的:
static void onChange(int value, void* userdata)
{

}

最佳答案

您可以为轨迹栏添加带有 ID 的用户数据

struct Userdata {
int sliderId;
std::string sliderName;
};

const Userdata userdata0 {0, "bar_0"};
cv::createTrackbar("bar_0", "window", &bSliderValue1, 100, onChange, const_cast<Userdata*>(&userdata0));

const Userdata userdata1 {1, "bar_1"};
cv::createTrackbar("bar_1", "window", &bSliderValue2, 100, onChange, const_cast<Userdata*>(&userdata1));

const Userdata userdata2 {2, "bar_2"};
cv::createTrackbar("bar_2", "window", &bSliderValue3, 100, onChange, const_cast<Userdata*>(&userdata2));

static void onChange(int value, void* userdata)
{
const auto &slider = const_cast<const Userdata&>(*static_cast<Userdata*>(userdata));
auto sliderId = slider.sliderId;
auto sliderName = slider.sliderName;
}

您应该用 C++ 强制转换替换 C 强制转换。

这是一个没有 const 的例子。
struct Userdata {
int sliderId;
std::string sliderName;
};

Userdata userdata0 {0, "bar_0"};
cv::createTrackbar("bar_0", "window", &bSliderValue1, 100, onChange, &userdata0);

Userdata userdata1 {1, "bar_1"};
cv::createTrackbar("bar_1", "window", &bSliderValue2, 100, onChange, &userdata1);

Userdata userdata2 {2, "bar_2"};
cv::createTrackbar("bar_2", "window", &bSliderValue3, 100, onChange, &userdata2);

static void onChange(int value, void* userdata)
{
const auto &slider = *static_cast<Userdata*>(userdata);
auto sliderId = slider.sliderId;
auto sliderName = slider.sliderName;
}

关于c++ - 使用相同的回调函数opencv c++管理多个轨迹栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61298196/

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