6 wndname = "Distance transform"
19 # define a trackbar callback
20 def on_trackbar(edge_thresh):
22 cv.Threshold(gray, edge, float(edge_thresh), float(edge_thresh), cv.CV_THRESH_BINARY)
24 cv.DistTransform(edge, dist, cv.CV_DIST_L2, cv.CV_DIST_MASK_5)
26 cv.ConvertScale(dist, dist, 5000.0, 0)
27 cv.Pow(dist, dist, 0.5)
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)
39 if __name__ == "__main__":
43 gray = cv.LoadImage(sys.argv[1], cv.CV_LOAD_IMAGE_GRAYSCALE)
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)
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)
58 # Convert to grayscale
59 edge = cv.CloneImage(gray)
62 cv.NamedWindow(wndname, 1)
65 cv.CreateTrackbar(tbarname, wndname, edge_thresh, 255, on_trackbar)
68 on_trackbar(edge_thresh)
70 # Wait for a key stroke; the same function arranges events processing
72 cv.DestroyAllWindows()