Update to 2.0.0 tree from current Fremantle build
[opencv] / samples / swig_python / inpaint.py
1 #!/usr/bin/python
2 from opencv.cv import *
3 from opencv.highgui import *
4 import sys
5
6 inpaint_mask = None
7 img0 = None
8 img = None
9 inpainted = None
10 prev_pt = cvPoint(-1,-1)
11
12 def on_mouse( event, x, y, flags, param ):
13     global prev_pt
14     if not img:
15         return
16
17     if event == CV_EVENT_LBUTTONUP or not (flags & CV_EVENT_FLAG_LBUTTON):
18         prev_pt = cvPoint(-1,-1)
19     elif event == CV_EVENT_LBUTTONDOWN:
20         prev_pt = cvPoint(x,y)
21     elif event == CV_EVENT_MOUSEMOVE and (flags & CV_EVENT_FLAG_LBUTTON) :
22         pt = cvPoint(x,y)
23         if prev_pt.x < 0:
24             prev_pt = pt
25         cvLine( inpaint_mask, prev_pt, pt, cvScalarAll(255), 5, 8, 0 )
26         cvLine( img, prev_pt, pt, cvScalarAll(255), 5, 8, 0 )
27         prev_pt = pt
28         cvShowImage( "image", img )
29
30 if __name__=="__main__":
31     filename = "../c/fruits.jpg"
32     if len(sys.argv) >= 2:
33         filename = sys.argv[1]
34
35     img0 = cvLoadImage(filename,-1)
36     if not img0:
37         print "Can't open image '%s'" % filename
38         sys.exit(1)
39
40     print "Hot keys:"
41     print "\tESC - quit the program"
42     print "\tr - restore the original image"
43     print "\ti or ENTER - run inpainting algorithm"
44     print "\t\t(before running it, paint something on the image)"
45     
46     cvNamedWindow( "image", 1 )
47
48     img = cvCloneImage( img0 )
49     inpainted = cvCloneImage( img0 )
50     inpaint_mask = cvCreateImage( cvGetSize(img), 8, 1 )
51
52     cvZero( inpaint_mask )
53     cvZero( inpainted )
54     cvShowImage( "image", img )
55     cvShowImage( "watershed transform", inpainted )
56     cvSetMouseCallback( "image", on_mouse, None )
57
58     while True:
59         c = cvWaitKey(0)
60
61         if c == '\x1b' or c == 'q':
62             break
63
64         if c == 'r':
65             cvZero( inpaint_mask )
66             cvCopy( img0, img )
67             cvShowImage( "image", img )
68
69         if c == 'i' or c == '\012':
70             cvNamedWindow( "inpainted image", 1 )
71             cvInpaint( img, inpaint_mask, inpainted, 3, CV_INPAINT_TELEA )
72             cvShowImage( "inpainted image", inpainted )
73