我们从哪里得到这个参数的值
Where are we getting the value of this parameter?
在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
通知滑块的新位置。
相关文章:
- 为什么我们不能重复使用具有不同模板参数的别名模板标识符?
- 我们可以用参数化构造函数初始化结构的数组吗?
- 对象作为参数传递,就好像我们正在传递构造函数值一样
- 我们能否使 GDB 在回溯中显示非平凡的参数
- 为什么我们需要在优先级队列声明中添加一个向量作为参数?
- 为什么我们需要创建一个单参数构造函数来使用临时的无名称对象
- 我们如何在线程中使用参数
- 为什么我们不允许将纯引用参数传递给 std::thread,但允许传递原始指针?
- 我们如何在 c++ 中检查模板参数的类型?
- 为什么我们可以创建一个模板类结构,其中包含许多与声明结构时指定的参数不同的参数
- 我们可以使用指针和何时使用空参数
- 类介绍 (c++) 项目希望我们创建两个构造函数,但它们都不需要任何参数 - 我应该在这里做什么?
- 可变参数函数并复制粘贴这些参数(就像我们在宏中一样)
- 当我们在 C++ 中的参数中传递它们时,如何修改一些数组而不修改其他数组
- 为什么我们不能在模板专业化的开始/中间使用可变参数模板(以及如何模拟)?
- 当我们声明额外的模板参数而未在定义中使用时,为什么编译器会丢弃错误
- 在哪些条件下,我们将指针作为函数参数
- 在 C++ 中,为什么我们在重载函数中将引用参数声明为 const
- 让我们C++推断定义参数的类/命名空间的位置
- C - 我应该接受哪种类型的参数?(我们什么时候应该铸造?)