Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 将回调参数传递给cvCreateTrackbar_Function_Opencv_Callback - Fatal编程技术网

Function 将回调参数传递给cvCreateTrackbar

Function 将回调参数传递给cvCreateTrackbar,function,opencv,callback,Function,Opencv,Callback,我对函数cvCreateTrackbar的回调参数有问题。下面是我得到的错误: C:\Users\XELTINFO\ProjetVision\moyenetmedian.cpp:28: erreur : argument of type 'void (MoyenEtMedian::)(int)' does not match 'CvTrackbarCallback {aka void (*)(int)}' 这是课程的代码: int g_switch_value = 0; int filterI

我对函数cvCreateTrackbar的回调参数有问题。下面是我得到的错误:

C:\Users\XELTINFO\ProjetVision\moyenetmedian.cpp:28: erreur : argument of type 'void (MoyenEtMedian::)(int)' does not match 'CvTrackbarCallback {aka void (*)(int)}'
这是课程的代码:

int g_switch_value = 0;
int filterInt = 0;
int lastfilterInt = -1;

void MoyenEtMedian::switch_callback(int position)
{
    filterInt = position;
}

void MoyenEtMedian::exec(void)
{
    const char* name = "Filtres";
    IplImage* img = cvLoadImage( "image.png" );
    IplImage* out = cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 3 );
    cvNamedWindow( name, 1 );
    cvShowImage(name, out);

    // Create trackbar
    cvCreateTrackbar( "Filtre", name, &g_switch_value, 1,switch_callback );

    while( 1 ) {
        switch( filterInt ){
            case 0:
                cvSmooth( img, out, CV_BLUR, 7, 7 );
                break;
            case 1:
                cvSmooth( img, out, CV_MEDIAN, 7, 7 );
                break;
                    }
        if(filterInt != lastfilterInt){
            cvShowImage(name, out);
            lastfilterInt = filterInt;
        }
        if( cvWaitKey( 15 ) == 27 )
            break;
    }

    cvReleaseImage( &img );
    cvReleaseImage( &out );
    cvDestroyWindow( name );
}

我打算通过插槽将exec函数连接到按钮。

您定义的回调函数(
void moyenetmedia::switch\u callback(int position)
)是
moyenetmedia
的成员函数。因此,它获取由编译器添加的类型为
moyenetmedia*
的隐式成员,而不是类型为
void(*)(int)
。因此,您将收到此错误消息


要解决此问题,可以将成员函数
switch\u callback
定义为
static
,但这样就不能在函数中使用类成员。您还可以定义一个回调函数,它不是类成员函数。

好的。现在我又遇到了另一个问题,我想将“moyenetmedia::exec”连接到这样一个按钮:“QObject::connect(ui->bMoyMed,SIGNAL(clicked()),m1,SLOT(m1::exec));”但它不起作用。该类未在作用域中声明。您遇到了哪个错误,可以发布更多代码吗?如果我的回答解决了你最初的问题,你能接受我的回答并投票表决吗?