10 g.prev_pt = cvPoint(-1,-1);
12 function on_mouse( event, x, y, flags, param )
16 if (!swig_this(g.img))
20 if (event == highgui.CV_EVENT_LBUTTONUP || ! (bitand(flags,highgui.CV_EVENT_FLAG_LBUTTON)))
21 g.prev_pt = cvPoint(-1,-1);
22 elseif (event == highgui.CV_EVENT_LBUTTONDOWN)
23 g.prev_pt = cvPoint(x,y);
24 elseif (event == highgui.CV_EVENT_MOUSEMOVE && bitand(flags,highgui.CV_EVENT_FLAG_LBUTTON))
29 cvLine( g.inpaint_mask, g.prev_pt, pt, cvScalarAll(255), 5, 8, 0 );
30 cvLine( g.img, g.prev_pt, pt, cvScalarAll(255), 5, 8, 0 );
32 cvShowImage( "image", g.img );
36 filename = "../c/fruits.jpg";
41 g.img0 = cvLoadImage(filename,-1);
42 if (!swig_this(g.img0))
43 printf("Can't open image '%s'\n", filename);
47 printf("Hot keys:\n");
48 printf("\tESC - quit the program\n");
49 printf("\tr - restore the original image\n");
50 printf("\ti or ENTER - run inpainting algorithm\n");
51 printf("\t\t(before running it, paint something on the image)\n");
53 cvNamedWindow( "image", 1 );
55 g.img = cvCloneImage( g.img0 );
56 g.inpainted = cvCloneImage( g.img0 );
57 g.inpaint_mask = cvCreateImage( cvGetSize(g.img), 8, 1 );
59 cvZero( g.inpaint_mask );
60 cvZero( g.inpainted );
61 cvShowImage( "image", g.img );
62 cvShowImage( "watershed transform", g.inpainted );
63 cvSetMouseCallback( "image", @on_mouse, [] );
68 if( c == 27 || c=='q')
73 cvZero( g.inpaint_mask );
74 cvCopy( g.img0, g.img );
75 cvShowImage( "image", g.img );
78 if( c == 'i' || c == '\012' )
79 cvNamedWindow( "g.inpainted image", 1 );
80 cvInpaint( g.img, g.inpaint_mask, g.inpainted, 3, CV_INPAINT_TELEA );
81 cvShowImage( "g.inpainted image", g.inpainted );