我正在使用 OS X/X Code/OpenCV 2.2 编写眼动仪代码。作为 Eye Tracker 训练过程的一部分,我使用 cvSetMouseCallback 来捕获数据,如下所示: 右击右眼;左键单击左眼。
但是,我发现该程序只能用左键单击 (CV_EVENT_LBUTTONDOWN) 而不能用右键单击 (CV_EVENT_RBUTTONDOWN)。起初,我以为是触控板和鼠标设置问题,结果发现我已经在机器中将两个Secondary Click都设置为“Right”。感谢有人可以对此有所了解吗?感谢您花时间研究这个问题。
对于那些感兴趣的人,我有一个简单的 cvSetMouseCallback 代码片段:
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
void my_mouse_callback( int event, int x, int y, int flags, void* param );
int main (int argc, const char * argv[])
{
CvCapture *capture;
IplImage *img;
int key = 0;
// initialize camera
capture = cvCaptureFromCAM( 0 );
// always check
assert( capture );
// create a window
cvNamedWindow( "video", 1 );
while( key != 'q' ) {
// get a frame
img = cvQueryFrame( capture );
// set the mouse callback function.
cvSetMouseCallback( "video", my_mouse_callback, (void*) img);
// always check
if( !img ) break;
// 'fix' frame
cvFlip( img, img, 1 );
img->origin = 0;
cvShowImage("video", img );
// quit if user press 'q'
key = cvWaitKey( 5 );
}
// free memory
cvReleaseCapture( &capture );
cvDestroyWindow( "video" );
return 0;
}
void my_mouse_callback( int event, int x, int y, int flags, void* param ){
//IplImage* image = (IplImage*) param;
switch( event ){
case CV_EVENT_LBUTTONDOWN:
printf("LBUTTONDOWN\n");
break;
case CV_EVENT_RBUTTONDOWN:
printf("RBUTTONDOWN\n");
break;
case CV_EVENT_FLAG_CTRLKEY:
printf("FLAG_LBUTTONDBLCLK\n");
break;
}
}
最佳答案
尝试删除这一行:
cvSetMouseCallback( "video", my_mouse_callback, (void*) img);
从循环中将其紧接在:
cvNamedWindow( "video", 1 );
问候!
关于opencv - 使用 cvSetMouseCallback 处理鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5000721/