के साथ माउस इवेंट हैंडलिंग मैं ओएस एक्स/एक्स कोड/ओपनसीवी 2.2 का उपयोग कर आंख ट्रैकर के लिए एक कोड लिख रहा हूं। आई ट्रैकर प्रशिक्षण प्रक्रिया के हिस्से के रूप में, मैं निम्नलिखित के अनुसार डेटा कैप्चर करने के लिए cvSetMouseCallback का उपयोग कर रहा हूं: दाहिनी आंखों के लिए राइट क्लिक करें; बाएं आंख के लिए बायाँ क्लिक करें।सीवीसेटमौस कैलबैक
हालांकि, मैंने पाया कि प्रोग्राम केवल बाएं क्लिक (CV_EVENT_LBUTTONDOWN) के साथ काम कर सकता है, जबकि यह दायाँ क्लिक (CV_EVENT_RBUTTONDOWN) के साथ काम नहीं करता है। सबसे पहले, मैंने सोचा कि यह एक ट्रैकपैड और माउस सेटिंग समस्याएं थी, हालांकि, यह पता चला है कि मैंने पहले ही माध्यमिक क्लिक को मशीन में "दाएं" के रूप में सेट कर दिया है। अगर कोई इस पर कुछ प्रकाश डाल सकता है तो सराहना करें? इसे देखने के लिए आपके समय के लिए धन्यवाद। पाश से
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;
}
}