В настоящее время у меня есть несколько ползунков, которые используются для изменения значений изображения. Я использую трек-бар OpenCV для слайдера, который имеет функцию обратного вызова для каждой из моих слайдеров. Я хотел бы, чтобы мои обратные вызовы ползунков указывали на одну функцию обратного вызова, а затем использовали пользовательские данные, чтобы определить, какой трекбар совершил вызов.
Вот документация для трек-бара
Я не уверен, какие значения я должен передавать в void *, а также как затем извлечь это значение из моей функции обратного вызова. Ниже приведен пример моей трек-бара, который компилируется.
int ref = 1;
createTrackbar("Name","Window",0, 1, myFunc, &ref);
В моей функции обратного вызова я пытаюсь получить значение ref.
void myFunc(int value, void *userdata)
{
int val = *((int*)&userdata);
cout << val << endl;
}
У меня были проблемы при попытке преобразовать указатель обратно в int, это решение я нашел в Интернете, которое дает мне val в качестве адреса ref.
int val = *((int*)&userdata);
Это кажется большой проблемой, так как тогда я должен получить значение обратно с адреса в val. Есть ли более простой способ сделать это?
Нет, более простого способа нет. Это необходимый минимум для функциональности, которую вы хотите.
Других решений пока нет …