我们从哪里得到这个参数的值

Where are we getting the value of this parameter?

本文关键字:参数 我们      更新时间:2023-10-16

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);
}

我们从哪里检索onTrackSlide(int pos)函数中pos的值?cvCreateTrackbar()传递给它的值是什么?

我不知道OpenCV -但它看起来像onTrackbarSlide是某种事件处理程序,所以它是从你正在创建的trackbar UI传递pos值。

没有直接从cvCreateTrackbar()传递的pos值-看起来它创建了您的trackbar UI,然后如果与用户交互将调用onTrackBarSlide

查看文档,你会看到函数签名是:

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

注意最后一个参数的类型是CvTrackbarCallback。显然,这不是一个内置类型,而是由OpenCV定义的类型。因此,我们回到文档中查找更多信息,有趣的是,出现了以下信息:

函数cvCreateTrackbar()创建具有指定名称和范围的trackbar(也称为滑块或范围控件),分配一个与trackbar位置同步的变量,并指定一个回调函数在trackbar位置更改时调用。

在这段话的正下方,你可以看到CvTrackbarCallback应该如何声明:

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

总之,为了调用cvCreateTrackbar(),你需要声明一个带有void some_fun(int pos)签名的函数,以便能够在跟踪条的滑块更新时被OpenCV通知。参数int pos通知滑块的新位置。

相关文章: