Function 将回调参数传递给cvCreateTrackbar
我对函数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
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));”但它不起作用。该类未在作用域中声明。您遇到了哪个错误,可以发布更多代码吗?如果我的回答解决了你最初的问题,你能接受我的回答并投票表决吗?