#! /usr/bin/env octave printf("OpenCV Octave version of convexhull\n"); ## import the necessary things for OpenCV cv; highgui; ## how many points we want at max _MAX_POINTS = 100; ## create the image where we want to display results image = cv.cvCreateImage (cv.cvSize (500, 500), 8, 3); ## create the window to put the image in highgui.cvNamedWindow ('hull', highgui.CV_WINDOW_AUTOSIZE); while (true) ## do forever ## get a random number of points count = int32(rand()*_MAX_POINTS)+1 ## initialisations points = {}; for i=1:count, ## generate a random point points{i} = cv.cvPoint \ (int32(rand() * (image.width / 2) + image.width / 4), \ int32(rand() * (image.height / 2) + image.height / 4)); \ endfor ## compute the convex hull hull = cv.cvConvexHull2 (points, cv.CV_CLOCKWISE, 0); ## start with an empty image cv.cvSetZero (image); for i=1:count, ## draw all the points cv.cvCircle (image, points {i}, 2, \ cv.cvScalar (0, 0, 255, 0), \ cv.CV_FILLED, cv.CV_AA, 0); endfor ## start the line from the last point pt0 = points {hull [-1]}; for point_index = 1:hull.rows, ## connect the previous point to the current one ## get the current one pt1 = points {point_index}; ## draw cv.cvLine (image, pt0, pt1, \ cv.cvScalar (0, 255, 0, 0), \ 1, cv.CV_AA, 0); ## now, current one will be the previous one for the next iteration pt0 = pt1; endfor ## display the final image highgui.cvShowImage ('hull', image); ## handle events, and wait a key pressed k = highgui.cvWaitKey (0); if (k == '\x1b') ## user has press the ESC key, so exit break endif endwhile