Update to 2.0.0 tree from current Fremantle build
[opencv] / samples / octave / drawing.m
diff --git a/samples/octave/drawing.m b/samples/octave/drawing.m
new file mode 100644 (file)
index 0000000..cd393fd
--- /dev/null
@@ -0,0 +1,161 @@
+#! /usr/bin/env octave
+
+printf("OpenCV Octave version of drawing\n");
+
+## import the necessary things for OpenCV
+cv;
+highgui;
+
+function ret=random_color ()
+  ret = CV_RGB(int32(rand()*255), int32(rand()*255), int32(rand()*255));
+endfunction
+
+
+## some "constants"
+width = 1000;
+height = 700;
+window_name = "Drawing Demo";
+number = 100;
+delay = 5;
+line_type = cv.CV_AA;  # change it to 8 to see non-antialiased graphics
+
+## create the source image
+image = cv.cvCreateImage (cv.cvSize (width, height), 8, 3);
+
+## create window and display the original picture in it
+highgui.cvNamedWindow (window_name, 1);
+cv.cvSetZero (image);
+highgui.cvShowImage (window_name, image);
+
+## draw some lines
+for i=0:number-1,
+  pt1 = cv.cvPoint (int32(rand() * 2 * width - width),
+                    int32(rand() * 2 * height - height));
+  pt2 = cv.cvPoint (int32(rand() * 2 * width - width),
+                    int32(rand() * 2 * height - height));
+  cv.cvLine (image, pt1, pt2,
+             random_color (),
+             int32(rand() * 10),
+             line_type, 0);
+  
+  highgui.cvShowImage (window_name, image);
+  highgui.cvWaitKey (delay);
+endfor
+
+## draw some rectangles
+for i=0:number-1,
+  pt1 = cv.cvPoint (int32(rand() * 2 * width - width),
+                    int32(rand() * 2 * height - height));
+  pt2 = cv.cvPoint (int32(rand() * 2 * width - width),
+                    int32(rand() * 2 * height - height));
+  cv.cvRectangle (image, pt1, pt2,
+                  random_color (),
+                  int32(rand() * 10 - 1),
+                  line_type, 0);
+  
+  highgui.cvShowImage (window_name, image);
+  highgui.cvWaitKey (delay);
+endfor
+
+## draw some ellipes
+for i=0:number-1,
+  pt1 = cv.cvPoint (int32(rand() * 2 * width - width),
+                    int32(rand() * 2 * height - height));
+  sz = cv.cvSize (int32(rand() * 200),
+                  int32(rand() * 200));
+  angle = rand() * 1000 * 0.180;
+  cv.cvEllipse (image, pt1, sz, angle, angle - 100, angle + 200,
+                random_color (),
+                int32(rand() * 10 - 1),
+                line_type, 0);
+  
+  highgui.cvShowImage (window_name, image);
+  highgui.cvWaitKey (delay);
+endfor
+
+## init the list of polylines
+nb_polylines = 2;
+polylines_size = 3;
+pt = cell(1, nb_polylines);
+for a=1:nb_polylines,
+  pt{a} = cell(1,polylines_size);
+endfor
+
+## draw some polylines
+for i=0:number-1,
+  for a=1:nb_polylines,
+    for b=1:polylines_size,
+      pt {a}{b} = cv.cvPoint (int32(rand() * 2 * width - width), \
+                              int32(rand() * 2 * height - height));
+    endfor
+  endfor
+  cv.cvPolyLine (image, pt, 1, random_color(), int32(rand() * 8 + 1), line_type, 0);
+
+  highgui.cvShowImage (window_name, image);
+  highgui.cvWaitKey (delay);
+endfor
+
+## draw some filled polylines
+for i=0:number-1,
+  for a=1:nb_polylines,
+    for b=1:polylines_size,
+      pt {a}{b} = cv.cvPoint (int32(rand() * 2 * width - width),
+                              int32(rand() * 2 * height - height));
+    endfor
+  endfor
+  cv.cvFillPoly (image, pt, random_color (), line_type, 0);
+
+  highgui.cvShowImage (window_name, image);
+  highgui.cvWaitKey (delay);
+endfor
+
+## draw some circles
+for i=0:number-1,
+  pt1 = cv.cvPoint (int32(rand() * 2 * width - width),
+                    int32(rand() * 2 * height - height));
+  cv.cvCircle (image, pt1, int32(rand() * 300), random_color (), \
+              int32(rand() * 10 - 1), line_type, 0);
+  
+  highgui.cvShowImage (window_name, image);
+  highgui.cvWaitKey (delay);
+endfor
+
+## draw some text
+for i=0:number-1,
+  pt1 = cv.cvPoint (int32(rand() * 2 * width - width), \
+                    int32(rand() * 2 * height - height));
+  font = cv.cvInitFont (int32(rand() * 8), \
+                        rand() * 100 * 0.05 + 0.01, \
+                        rand() * 100 * 0.05 + 0.01, \
+                        rand() * 5 * 0.1, \
+                        int32(rand() * 10), \
+                        line_type);
+
+  cv.cvPutText (image, "Testing text rendering!", \
+                pt1, font, \
+                random_color ());
+  
+  highgui.cvShowImage (window_name, image);
+  highgui.cvWaitKey (delay);
+endfor
+
+## prepare a text, and get it's properties
+font = cv.cvInitFont (cv.CV_FONT_HERSHEY_COMPLEX, \
+                      3, 3, 0.0, 5, line_type);
+[text_size, ymin] = cv.cvGetTextSize ("OpenCV forever!", font);
+pt1.x = int32((width - text_size.width) / 2);
+pt1.y = int32((height + text_size.height) / 2);
+image2 = cv.cvCloneImage(image);
+
+## now, draw some OpenCV pub ;-)
+for i=0:255-1,
+  cv.cvSubS (image2, cv.cvScalarAll (i), image, []);
+  cv.cvPutText (image, "OpenCV forever!",
+                pt1, font, cv.cvScalar (255, i, i));
+  highgui.cvShowImage (window_name, image);
+  highgui.cvWaitKey (delay);
+endfor
+
+## wait some key to end
+highgui.cvWaitKey (0);
+