Я пишу код для айтрекера с использованием 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;
}
}