--- /dev/null
+#! /usr/bin/env octave
+cv;
+highgui;
+
+global g;
+inpaint_mask = [];
+g.img0 = [];
+g.img = [];
+g.inpainted = [];
+g.prev_pt = cvPoint(-1,-1);
+
+function on_mouse( event, x, y, flags, param )
+ global g;
+ global cv;
+ global highgui;
+ if (!swig_this(g.img))
+ return;
+ endif
+
+ if (event == highgui.CV_EVENT_LBUTTONUP || ! (bitand(flags,highgui.CV_EVENT_FLAG_LBUTTON)))
+ g.prev_pt = cvPoint(-1,-1);
+ elseif (event == highgui.CV_EVENT_LBUTTONDOWN)
+ g.prev_pt = cvPoint(x,y);
+ elseif (event == highgui.CV_EVENT_MOUSEMOVE && bitand(flags,highgui.CV_EVENT_FLAG_LBUTTON))
+ pt = cvPoint(x,y);
+ if (g.prev_pt.x < 0)
+ g.prev_pt = pt;
+ endif
+ cvLine( g.inpaint_mask, g.prev_pt, pt, cvScalarAll(255), 5, 8, 0 );
+ cvLine( g.img, g.prev_pt, pt, cvScalarAll(255), 5, 8, 0 );
+ g.prev_pt = pt;
+ cvShowImage( "image", g.img );
+ endif
+endfunction
+
+filename = "../c/fruits.jpg";
+if (size(argv, 1)>=1)
+ filename = argv(){1};
+endif
+
+g.img0 = cvLoadImage(filename,-1);
+if (!swig_this(g.img0))
+ printf("Can't open image '%s'\n", filename);
+ exit(1);
+endif
+
+printf("Hot keys:\n");
+printf("\tESC - quit the program\n");
+printf("\tr - restore the original image\n");
+printf("\ti or ENTER - run inpainting algorithm\n");
+printf("\t\t(before running it, paint something on the image)\n");
+
+cvNamedWindow( "image", 1 );
+
+g.img = cvCloneImage( g.img0 );
+g.inpainted = cvCloneImage( g.img0 );
+g.inpaint_mask = cvCreateImage( cvGetSize(g.img), 8, 1 );
+
+cvZero( g.inpaint_mask );
+cvZero( g.inpainted );
+cvShowImage( "image", g.img );
+cvShowImage( "watershed transform", g.inpainted );
+cvSetMouseCallback( "image", @on_mouse, [] );
+
+while (true)
+ c = cvWaitKey(0);
+
+ if( c == 27 || c=='q')
+ break;
+ endif
+
+ if( c == 'r' )
+ cvZero( g.inpaint_mask );
+ cvCopy( g.img0, g.img );
+ cvShowImage( "image", g.img );
+ endif
+
+ if( c == 'i' || c == '\012' )
+ cvNamedWindow( "g.inpainted image", 1 );
+ cvInpaint( g.img, g.inpaint_mask, g.inpainted, 3, CV_INPAINT_TELEA );
+ cvShowImage( "g.inpainted image", g.inpainted );
+ endif
+endwhile
+