9a232745001e1445cf85b09773f6ff4207fbb881
[profile/ivi/opencv.git] / samples / python / distrans.py
1 #!/usr/bin/python
2 import sys
3 import cv2.cv as cv
4 import urllib2
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     cv.Threshold(gray, edge, float(edge_thresh), float(edge_thresh), cv.CV_THRESH_BINARY)
23     #Distance transform                  
24     cv.DistTransform(edge, dist, cv.CV_DIST_L2, cv.CV_DIST_MASK_5)
25
26     cv.ConvertScale(dist, dist, 5000.0, 0)
27     cv.Pow(dist, dist, 0.5)
28     
29     cv.ConvertScale(dist, dist32s, 1.0, 0.5)
30     cv.AndS(dist32s, cv.ScalarAll(255), dist32s, None)
31     cv.ConvertScale(dist32s, dist8u1, 1, 0)
32     cv.ConvertScale(dist32s, dist32s, -1, 0)
33     cv.AddS(dist32s, cv.ScalarAll(255), dist32s, None)
34     cv.ConvertScale(dist32s, dist8u2, 1, 0)
35     cv.Merge(dist8u1, dist8u2, dist8u2, None, dist8u)
36     cv.ShowImage(wndname, dist8u)
37
38
39 if __name__ == "__main__":
40     edge_thresh = 100
41
42     if len(sys.argv) > 1:
43         gray = cv.LoadImage(sys.argv[1], cv.CV_LOAD_IMAGE_GRAYSCALE)
44     else:
45         url = 'http://code.opencv.org/svn/opencv/trunk/opencv/samples/c/stuff.jpg'
46         filedata = urllib2.urlopen(url).read()
47         imagefiledata = cv.CreateMatHeader(1, len(filedata), cv.CV_8UC1)
48         cv.SetData(imagefiledata, filedata, len(filedata))
49         gray = cv.DecodeImage(imagefiledata, cv.CV_LOAD_IMAGE_GRAYSCALE)
50
51     # Create the output image
52     dist = cv.CreateImage((gray.width, gray.height), cv.IPL_DEPTH_32F, 1)
53     dist8u1 = cv.CloneImage(gray)
54     dist8u2 = cv.CloneImage(gray)
55     dist8u = cv.CreateImage((gray.width, gray.height), cv.IPL_DEPTH_8U, 3)
56     dist32s = cv.CreateImage((gray.width, gray.height), cv.IPL_DEPTH_32S, 1)
57
58     # Convert to grayscale
59     edge = cv.CloneImage(gray)
60
61     # Create a window
62     cv.NamedWindow(wndname, 1)
63
64     # create a toolbar 
65     cv.CreateTrackbar(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     cv.WaitKey(0)
72     cv.DestroyAllWindows()