Я пишу код для eye tracker, используя OS X / X Code / OpenCV 2.2. Как часть процесса обучения Eye Tracker, я использую cvSetMouseCallback для захвата данных в соответствии со следующим:
Щелкните правой кнопкой мыши для правого глаза; Левый клик для левого глаза.
Однако я обнаружил, что программа может работать только с левым щелчком (CV_EVENT_LBUTTONDOWN), в то время как она не работает с правым щелчком (CV_EVENT_RBUTTONDOWN). Сначала я думал, что это были проблемы с настройкой трекпада и мыши, однако, оказалось, что я уже установил вторичный щелчок как «Правый» в машине. Цените, если кто-то может пролить свет на это? Спасибо, что уделили время на это.
Для тех, кто заинтересован, у меня есть простой фрагмент кода для 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;
}
}