【问题标题】:Where are we getting the value of this parameter?我们从哪里得到这个参数的值?
【发布时间】:2011-10-12 03:23:28
【问题描述】:

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() 会传递什么值?

【问题讨论】:

    标签: c++ function opencv parameter-passing


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。正如您在cvCreateTrackbar 中看到的那样,onTrackbarSlide 作为参数传递,但是对onTrackbarSlide(int pos) 的调用发生在哪里?
    • @Med-SWEng 这个调用是由 OpenCV 的一个内部函数发出的,让您知道轨迹栏的滑块何时更新。
    【解决方案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 告知滑块的新位置。

    【讨论】:

      猜你喜欢
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多