在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()
传递给它什么值?
答案 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
通知滑块的新位置。