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