Где мы получаем значение этого параметра? - PullRequest
1 голос
/ 24 июля 2011

В программе в книге Learning OpenCV:

void onTrackbarSlide(int pos)
{
cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);
}

И в другом месте:

if(frames!=0)
{
cvCreateTrackbar("Position","Example3",&g_slider_position,frames,onTrackbarSlide);
}

Где мы получаем значение pos в onTrackSlide(int pos) функция от?Какое значение будет передано ему из cvCreateTrackbar()?

Ответы [ 2 ]

4 голосов
/ 24 июля 2011

Я не знаю OpenCV - но похоже, что onTrackbarSlide - это своего рода обработчик событий, поэтому ему передается значение pos из пользовательского интерфейса трекбара.

Нетзначение pos напрямую передается из cvCreateTrackbar() - похоже, оно создает ваш трекбар UI, а затем при взаимодействии с пользователем вызовет onTrackBarSlide.

2 голосов
/ 25 июля 2011

Проверьте документы , и вы увидите подпись функции:

cvCreateTrackbar(const char* trackbarName, const char* windowName, int* value, int count, CvTrackbarCallback onChange)

Обратите внимание, что последний параметр имеет тип CvTrackbarCallback.Очевидно, что это не встроенный тип, а тип, определенный OpenCV.Итак, мы возвращаемся к документации, чтобы узнать больше об этом, и, что интересно, эта информация отображается:

Функция cvCreateTrackbar () создает трекбар (он же слайдер или регулятор диапазона) с указанным именем иrange, назначает переменную, которая будет синхронизирована с положением трекбара, и задает функцию обратного вызова , которая будет вызываться при изменении положения трекбара.

И прямо под этим абзацем вы можете увидеть, какCvTrackbarCallback должно быть объявлено:

CV_EXTERN_C_FUNCPTR( void (*CvTrackbarCallback)(int pos) );

Подводя итог, для вызова cvCreateTrackbar() вам необходимо объявить функцию с подписью void some_fun(int pos), чтобы иметь возможность получать уведомления от OpenCV, когда ползуноктрекбар обновлен.Аргумент int pos сообщает новую позицию ползунка.

...