/* Resize an image with a border (for display of vanishing line). 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, in a larger window void mouse (int event, int x, int y, int flags, void *param) { switch (event) { case CV_EVENT_LBUTTONDOWN: 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]); // copy image into a larger window with border of size 300 around each edge editImg = cvCreateImage (cvSize(srcImg->width + 600, srcImg->height + 600), srcImg->depth, srcImg->nChannels); cvSetImageROI (editImg, cvRect (300, 300, srcImg->width, srcImg->height)); cvResize (srcImg, editImg); // copy image over to subrectangle within larger image // (no rescaling necessary, but translation) cvResetImageROI (editImg); // reset region of interest to entire image 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; }