Update to 2.0.0 tree from current Fremantle build
[opencv] / samples / octave / inpaint.m
1 #! /usr/bin/env octave
2 cv;
3 highgui;
4
5 global g;
6 inpaint_mask = [];
7 g.img0 = [];
8 g.img = [];
9 g.inpainted = [];
10 g.prev_pt = cvPoint(-1,-1);
11
12 function on_mouse( event, x, y, flags, param )
13   global g;
14   global cv;
15   global highgui;
16   if (!swig_this(g.img))
17     return;
18   endif
19
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))
25     pt = cvPoint(x,y);
26     if (g.prev_pt.x < 0)
27       g.prev_pt = pt;
28     endif
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 );
31     g.prev_pt = pt;
32     cvShowImage( "image", g.img );
33   endif
34 endfunction
35
36 filename = "../c/fruits.jpg";
37 if (size(argv, 1)>=1)
38   filename = argv(){1};
39 endif
40
41 g.img0 = cvLoadImage(filename,-1);
42 if (!swig_this(g.img0))
43   printf("Can't open image '%s'\n", filename);
44   exit(1);
45 endif
46
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");
52
53 cvNamedWindow( "image", 1 );
54
55 g.img = cvCloneImage( g.img0 );
56 g.inpainted = cvCloneImage( g.img0 );
57 g.inpaint_mask = cvCreateImage( cvGetSize(g.img), 8, 1 );
58
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, [] );
64
65 while (true)
66   c = cvWaitKey(0);
67
68   if( c == 27 || c=='q')
69     break;
70   endif
71
72   if( c == 'r' )
73     cvZero( g.inpaint_mask );
74     cvCopy( g.img0, g.img );
75     cvShowImage( "image", g.img );
76   endif
77
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 );
82   endif
83 endwhile
84