/* Demo program to get mouse input in OpenCV. J.K. Johnstone */ #include // these two OpenCV libraries should be included #include // in any OpenCV program #include using namespace std; IplImage *srcImg; // original image (left untouched) IplImage *editImg; // image to be edited (with added points) void mouse (int event, int x, int y, int flags, void *param) { switch (event) { case CV_EVENT_LBUTTONDOWN: cout << x << "," << y << endl; cvCircle (editImg, cvPoint(x,y), 2, // add red point at mouse location CV_RGB(255,0,0), -1); cvShowImage ("mousy", editImg); // and redraw to show it break; } } int main (int argc, char **argv) { if (argc != 2) { cout << "Need an image parameter (jpg or ppm/pgm)" << endl; exit(-1); } srcImg = cvLoadImage (argv[1]); editImg = cvCreateImage (cvGetSize(srcImg), srcImg->depth, srcImg->nChannels); cvCopy (srcImg, editImg); // cvCopy must be prefaced by cvCreateImage cvNamedWindow ("mousy", 1); cvSetMouseCallback ("mousy", mouse, 0); int done=0; while (!done) { cvShowImage ("mousy", editImg); // 1st parameter is window int c = cvWaitKey(0); // we now care what the keystroke is switch (int(c)) { case 'c': cvCopy (srcImg, editImg); break; // clear case 10: done=1; break; // linefeed } } cvDestroyWindow("foo"); cvReleaseImage (&srcImg); cvReleaseImage (&editImg); return 0; }