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

时间:2011-07-24 18:48:16

标签: c++ function opencv parameter-passing

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 个答案:

答案 0 :(得分:4)

我不知道OpenCV - 但看起来onTrackbarSlide是某种事件处理程序,因此它会从您正在创建的轨迹栏UI传递一个pos值。

没有直接从cvCreateTrackbar()传递的pos值 - 看起来它会创建您的轨迹栏用户界面,然后如果用户进行了互动,则会调用onTrackBarSlide

答案 1 :(得分:2)

Check the docs你会看到函数签名是:

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

请注意,最后一个参数的类型为CvTrackbarCallback。显然,这不是内置类型,而是OpenCV定义的类型。所以我们回到文档中找到更多关于它的信息,有趣的是,这些信息显示出来了:

  

函数cvCreateTrackbar()创建一个具有指定名称和范围的轨迹栏(也称为滑块或范围控件),指定一个与轨迹栏位置同步的变量,并指定要调用的回调函数跟踪栏位置变化。

在本段的正下方,您可以看到如何声明CvTrackbarCallback

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

总而言之,为了调用cvCreateTrackbar(),您需要声明一个带有签名void some_fun(int pos)的函数,以便在更新轨迹栏的滑块时能够通过OpenCV通知。参数int pos通知滑块的新位置。