Estoy escribiendo un código para eye tracker usando OS X/X Code/OpenCV 2.2. Como parte del proceso de entrenamiento Eye Tracker, estoy usando cvSetMouseCallback para capturar los datos de la siguiente manera: Haga clic derecho para el ojo derecho; Haz clic izquierdo para el ojo izquierdo.Manejo de eventos del mouse con cvSetMouseCallback
Sin embargo, me pareció que el programa solo podía funcionar con el clic izquierdo (CV_EVENT_LBUTTONDOWN) mientras que no funcionaba con el botón derecho (CV_EVENT_RBUTTONDOWN). Al principio, pensé que se trataba de un problema de configuración de mouse y mouse, sin embargo, resulta que ya configuré Click Secundario como "Derecha" en la máquina. Apreciar si alguien pudiera arrojar algo de luz sobre esto? Gracias por su tiempo para ver esto.
Para los interesados, que tienen un simple fragmento de código para 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;
}
}