X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=samples%2Foctave%2Fdistrans.m;fp=samples%2Foctave%2Fdistrans.m;h=b70abe14ba1dac31c21e236febfab3873b54c4b6;hb=e4c14cdbdf2fe805e79cd96ded236f57e7b89060;hp=0000000000000000000000000000000000000000;hpb=454138ff8a20f6edb9b65a910101403d8b520643;p=opencv diff --git a/samples/octave/distrans.m b/samples/octave/distrans.m new file mode 100644 index 0000000..b70abe1 --- /dev/null +++ b/samples/octave/distrans.m @@ -0,0 +1,76 @@ +#! /usr/bin/env octave +cv; +highgui; + +global g; + +g.wndname = "Distance transform"; +g.tbarname = "Threshold"; + +## The output images +g.dist = 0; +g.dist8u1 = 0; +g.dist8u2 = 0; +g.dist8u = 0; +g.dist32s = 0; + +g.gray = 0; +g.edge = 0; + +## define a trackbar callback +function on_trackbar( edge_thresh ) + global g; + global cv; + + cvThreshold( g.gray, g.edge, double(edge_thresh), double(edge_thresh), cv.CV_THRESH_BINARY ); + ## Distance transform + cvDistTransform( g.edge, g.dist, cv.CV_DIST_L2, cv.CV_DIST_MASK_5, [], [] ); + + cvConvertScale( g.dist, g.dist, 5000.0, 0 ); + cvPow( g.dist, g.dist, 0.5 ); + + cvConvertScale( g.dist, g.dist32s, 1.0, 0.5 ); + cvAndS( g.dist32s, cvScalarAll(255), g.dist32s, [] ); + cvConvertScale( g.dist32s, g.dist8u1, 1, 0 ); + cvConvertScale( g.dist32s, g.dist32s, -1, 0 ); + cvAddS( g.dist32s, cvScalarAll(255), g.dist32s, [] ); + cvConvertScale( g.dist32s, g.dist8u2, 1, 0 ); + cvMerge( g.dist8u1, g.dist8u2, g.dist8u2, [], g.dist8u ); + cvShowImage( g.wndname, g.dist8u ); +endfunction + + +edge_thresh = 100; + +filename = "../c/stuff.jpg"; +if (size(argv, 1) > 1) + filename = argv(){1}; +endif + +g.gray = cvLoadImage( filename, 0 ); +if (!swig_this(g.gray)) + printf("Failed to load %s\n",filename); + exit(-1); +endif + +## Create the output image +g.dist = cvCreateImage( cvSize(g.gray.width,g.gray.height), IPL_DEPTH_32F, 1 ); +g.dist8u1 = cvCloneImage( g.gray ); +g.dist8u2 = cvCloneImage( g.gray ); +g.dist8u = cvCreateImage( cvSize(g.gray.width,g.gray.height), IPL_DEPTH_8U, 3 ); +g.dist32s = cvCreateImage( cvSize(g.gray.width,g.gray.height), IPL_DEPTH_32S, 1 ); + +## Convert to grayscale +g.edge = cvCloneImage( g.gray ); + +## Create a window +cvNamedWindow( g.wndname, 1 ); + +## create a toolbar +cvCreateTrackbar( g.tbarname, g.wndname, edge_thresh, 255, @on_trackbar ); + +## Show the image +on_trackbar(edge_thresh); + +## Wait for a key stroke; the same function arranges events processing +cvWaitKey(0);