Update the changelog
[opencv] / samples / python / distrans.py
1 #!/usr/bin/python
2 import sys
3 from opencv.cv import *
4 from opencv.highgui import *
5
6 wndname = "Distance transform";
7 tbarname = "Threshold";
8
9 # The output images
10 dist = 0;
11 dist8u1 = 0;
12 dist8u2 = 0;
13 dist8u = 0;
14 dist32s = 0;
15
16 gray = 0;
17 edge = 0;
18
19 # define a trackbar callback
20 def on_trackbar( edge_thresh ):
21
22     cvThreshold( gray, edge, float(edge_thresh), float(edge_thresh), CV_THRESH_BINARY );
23     #Distance transform                  
24     cvDistTransform( edge, dist, CV_DIST_L2, CV_DIST_MASK_5, None, None );
25
26     cvConvertScale( dist, dist, 5000.0, 0 );
27     cvPow( dist, dist, 0.5 );
28     
29     cvConvertScale( dist, dist32s, 1.0, 0.5 );
30     cvAndS( dist32s, cvScalarAll(255), dist32s, None );
31     cvConvertScale( dist32s, dist8u1, 1, 0 );
32     cvConvertScale( dist32s, dist32s, -1, 0 );
33     cvAddS( dist32s, cvScalarAll(255), dist32s, None );
34     cvConvertScale( dist32s, dist8u2, 1, 0 );
35     cvMerge( dist8u1, dist8u2, dist8u2, None, dist8u );
36     cvShowImage( wndname, dist8u );
37
38
39 if __name__ == "__main__":
40     edge_thresh = 100;
41
42     filename = "../c/stuff.jpg"
43     if len(sys.argv) > 1:
44         filename = sys.argv[1]
45
46     gray = cvLoadImage( filename, 0 )
47     if not gray:
48         print "Failed to load %s" % filename
49         sys.exit(-1)
50
51     # Create the output image
52     dist = cvCreateImage( cvSize(gray.width,gray.height), IPL_DEPTH_32F, 1 );
53     dist8u1 = cvCloneImage( gray );
54     dist8u2 = cvCloneImage( gray );
55     dist8u = cvCreateImage( cvSize(gray.width,gray.height), IPL_DEPTH_8U, 3 );
56     dist32s = cvCreateImage( cvSize(gray.width,gray.height), IPL_DEPTH_32S, 1 );
57
58     # Convert to grayscale
59     edge = cvCloneImage( gray );
60
61     # Create a window
62     cvNamedWindow( wndname, 1 );
63
64     # create a toolbar 
65     cvCreateTrackbar( tbarname, wndname, edge_thresh, 255, on_trackbar );
66
67     # Show the image
68     on_trackbar(edge_thresh);
69
70     # Wait for a key stroke; the same function arranges events processing
71     cvWaitKey(0);