#! /usr/bin/env octave cv; highgui; global g; g.image0 = []; g.image1 = []; g.threshold1 = 255; g.threshold2 = 30; g.l = g.level = 4; g.block_size = 1000; g.filter = CV_GAUSSIAN_5x5; g.storage = []; g.min_comp = CvConnectedComp(); function set_thresh1( val ) global g; g.threshold1 = val; ON_SEGMENT(); endfunction function set_thresh2( val ) global g; g.threshold2 = val; ON_SEGMENT() endfunction function ON_SEGMENT() global g; global cv; g swig_this(g.image0) swig_this(g.image1) swig_this(g.storage) g.level g.threshold1 g.threshold2 comp = cv.cvPyrSegmentation(g.image0, g.image1, g.storage, g.level, g.threshold1+1, g.threshold2+1); cvShowImage("Segmentation", g.image1); endfunction filename = "../c/fruits.jpg"; if (size(argv, 2) >= 1) filename = argv(){1}; endif g.image0 = cvLoadImage( filename, 1); if (! swig_this(g.image0)) printf("Error opening %s\n",filename); exit(-1); endif cvNamedWindow("Source", 0); cvShowImage("Source", g.image0); cvNamedWindow("Segmentation", 0); g.storage = cvCreateMemStorage ( g.block_size ); new_width = bitshift(g.image0.width, -g.level); new_height = bitshift(g.image0.height, -g.level); g.image0 = cvCreateImage( cvSize(new_width,new_height), g.image0.depth, g.image0.nChannels ); g.image1 = cvCreateImage( cvSize(new_width,new_height), g.image0.depth, g.image0.nChannels ); ## segmentation of the color image g.l = 1; g.threshold1 =255; g.threshold2 =30; ON_SEGMENT(); g.sthreshold1 = cvCreateTrackbar("Threshold1", "Segmentation", g.threshold1, 255, @set_thresh1); g.sthreshold2 = cvCreateTrackbar("Threshold2", "Segmentation", g.threshold2, 255, @set_thresh2); cvShowImage("Segmentation", image1); cvWaitKey(0); cvDestroyWindow("Segmentation"); cvDestroyWindow("Source");