关于opencv中cvSetMouseCallback函数的有关问题
关于opencv中cvSetMouseCallback函数的问题
这样一个类:
*****************************************************************************************
class BallDetect
{
public:
void myMouseCallback( int event, int x, int y, int flags, void* param);
void setMouseCallBack()
{
cvSetMouseCallback( "Find Color Mode", myMouseCallback, (void*) src)
}
void run();
};
*****************************************************************************************
其中cvSetMouseCallback()第二个参数提示说,myMouseCallback该实参与cvSetMouseCallback的形参不兼容。
我看一些一些示例程序中,如:
******************************************************************************************
int main(int argc, char** argv)
{
CvCapture *capture;
IplImage *frame;
capture =cvCaptureFromCAM(0) ;
cvNamedWindow("Webcam",0);
cvSetMouseCallback("Webcam",onMouse,NULL);
while(true)
{
frame = cvQueryFrame(capture);
cvShowImage("Webcam",frame);
if(cvWaitKey(10)>=0)
{
break;
}
}
cvReleaseCapture(&capture);
cvDestroyWindow("Webcam");
return 0;
}
void onMouse(int Event,int x,int y,int flags,void* param )
{
printf("( %d, %d) ",x,y);
printf("The Event is : %d ",Event);
printf("The flags is : %d ",flags);
printf("The param is : %d\n",param);
}
******************************************************************************
其中cvSetMouseCallback的第二形参用的就是void onMouse()函数的函数名。
请问大家为什么会出现上述的问题?怎么解决该问题?
对你的帮助表示真诚的感谢~~~
------解决方案--------------------
在class中的话,应该用静态函数,比如static void myMouseCallback(int event, int x, int y, int flags, void* param)这样定义。
这样一个类:
*****************************************************************************************
class BallDetect
{
public:
void myMouseCallback( int event, int x, int y, int flags, void* param);
void setMouseCallBack()
{
cvSetMouseCallback( "Find Color Mode", myMouseCallback, (void*) src)
}
void run();
};
*****************************************************************************************
其中cvSetMouseCallback()第二个参数提示说,myMouseCallback该实参与cvSetMouseCallback的形参不兼容。
我看一些一些示例程序中,如:
******************************************************************************************
int main(int argc, char** argv)
{
CvCapture *capture;
IplImage *frame;
capture =cvCaptureFromCAM(0) ;
cvNamedWindow("Webcam",0);
cvSetMouseCallback("Webcam",onMouse,NULL);
while(true)
{
frame = cvQueryFrame(capture);
cvShowImage("Webcam",frame);
if(cvWaitKey(10)>=0)
{
break;
}
}
cvReleaseCapture(&capture);
cvDestroyWindow("Webcam");
return 0;
}
void onMouse(int Event,int x,int y,int flags,void* param )
{
printf("( %d, %d) ",x,y);
printf("The Event is : %d ",Event);
printf("The flags is : %d ",flags);
printf("The param is : %d\n",param);
}
******************************************************************************
其中cvSetMouseCallback的第二形参用的就是void onMouse()函数的函数名。
请问大家为什么会出现上述的问题?怎么解决该问题?
对你的帮助表示真诚的感谢~~~
------解决方案--------------------
在class中的话,应该用静态函数,比如static void myMouseCallback(int event, int x, int y, int flags, void* param)这样定义。