我正在使用OS X/X Code/OpenCV 2.2編寫眼動儀的代碼。作爲Eye Tracker培訓過程的一部分,我使用cvSetMouseCallback來捕獲以下數據: 右擊右眼;左鍵點擊左眼。使用cvSetMouseCallback處理鼠標事件
但是,我發現程序只能用左鍵單擊(CV_EVENT_LBUTTONDOWN),而右鍵單擊時不起作用(CV_EVENT_RBUTTONDOWN)。起初,我認爲這是一個觸控板和鼠標設置問題,但是,事實證明,我已經在機器中將輔助點擊設置爲「正確」。欣賞是否有人可以闡明這一點?感謝您花時間研究這一點。
對於那些有興趣,我有cvSetMouseCallback一個簡單的代碼片段:從環
cvSetMouseCallback("video", my_mouse_callback, (void*) img);
,並立即將其放置後:
#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;
}
}