C++ 类中的 OpenCV 轨迹栏回调

2024-02-16

我有一个关于在使用 C++ 中的类时如何定义 OpenCV 中轨迹栏回调的问题。

当我定义轨迹栏时,假设在 .cpp 类的构造函数方法中如何定义回调?

我一直在尝试使用函数指针,但没有成功。我想我一定做错了什么:-)

这是我的头文件:

class SliderwithImage {

public:
    SliderwithImage(void);
    ~SliderwithImage(void); 

    void sliderCallBack(int pos);
};

这是实现文件:

#include "SliderwithImage.h"

void SliderwithImage::sliderCallBack(int pos) {


}

SliderwithImage::SliderwithImage(void)  {

    const char* windowName = "window";
    int lowvalue  =1;

    namedWindow(windowName,  CV_GUI_EXPANDED);

    createTrackbar("mytrackbar", windowName, &lowvalue, 255, sliderCallBack);

}

SliderwithImage::~SliderwithImage(void) {

}

显然 createTrackbar 方法无法识别 sliderCallBack...我猜这是范围问题。但我不确定如何解决这个问题?

任何帮助,将不胜感激。

非常感谢。


回调函数必须是静态或全局的,但您可以向其传递对要操作的对象的引用(请参阅这个帖子 http://opencv-users.1802565.n2.nabble.com/Member-function-callback-in-cvCreateTrackbar-td3785481.html在 OpenCV 用户邮件列表中)。

The 创建轨迹栏 http://opencv.willowgarage.com/documentation/cpp/user_interface.html#cv-createtrackbar方法有一个userdata传递给调用函数的参数。在C中有一个未记录的cvCreateTrackbar2方法,定义于highgui_c.h,它具有相同的功能:

CVAPI(int) cvCreateTrackbar2( const char* trackbar_name, const char* window_name,
    int* value, int count, CvTrackbarCallback2 on_change,
    void* userdata CV_DEFAULT(0));

这些方法允许您创建一个带有静态回调函数的类,该函数采用指向该类的对象的指针。您可以像这样创建轨迹栏:

cv:createTrackbar("Label", "Window" &variable, MAX_VAL, &MyClass::func, this);

回调看起来像这样:

void MyClass:func(int newValue, void * object) {
    MyClass* myClass = (MyClass*) object;
    // ...do stuff.
}

请注意,您不需要自己显式更新变量,只要在创建轨迹栏时提供指向该变量的指针即可(如上所述),但如果您需要先处理它,我建议您在回调函数中显式设置它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 类中的 OpenCV 轨迹栏回调 的相关文章

随机推荐