2011-02-15 137 views
6

我正在使用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; 
} 

} 

回答

2

嘗試刪除此行

cvNamedWindow("video", 1); 

關心!

0

我可以看到,這是一箇舊帖子,但對於尋求未來幫助的人們:我有一個類似的問題,使用opencv(在Python中)和this answer幫助我。簡而言之,右鍵單擊返回的標誌值與從CV_EVENT_RBUTTONDOWN返回的值不匹配;打印右鍵單擊時獲得的標誌值並將其與存儲在CV_EVENT_RBUTTONDOWN中的標誌值進行比較以查看它們是否相同可能會有所幫助。