Update to 2.0.0 tree from current Fremantle build
[opencv] / samples / swig_python / drawing.py
diff --git a/samples/swig_python/drawing.py b/samples/swig_python/drawing.py
new file mode 100755 (executable)
index 0000000..354ac7a
--- /dev/null
@@ -0,0 +1,164 @@
+#! /usr/bin/env python
+
+print "OpenCV Python version of drawing"
+
+# import the necessary things for OpenCV
+from opencv import cv
+from opencv import highgui
+
+# for making random numbers
+from random import Random
+
+def random_color (random):
+    """
+    Return a random color
+    """
+    icolor = random.randint (0, 0xFFFFFF)
+    return cv.cvScalar (icolor & 0xff, (icolor >> 8) & 0xff, (icolor >> 16) & 0xff)
+
+if __name__ == '__main__':
+
+    # 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)
+
+    # create the random number
+    random = Random ()
+
+    # draw some lines
+    for i in range (number):
+        pt1 = cv.cvPoint (random.randrange (-width, 2 * width),
+                          random.randrange (-height, 2 * height))
+        pt2 = cv.cvPoint (random.randrange (-width, 2 * width),
+                          random.randrange (-height, 2 * height))
+        cv.cvLine (image, pt1, pt2,
+                   random_color (random),
+                   random.randrange (0, 10),
+                   line_type, 0)
+        
+        highgui.cvShowImage (window_name, image)
+        highgui.cvWaitKey (delay)
+
+    # draw some rectangles
+    for i in range (number):
+        pt1 = cv.cvPoint (random.randrange (-width, 2 * width),
+                          random.randrange (-height, 2 * height))
+        pt2 = cv.cvPoint (random.randrange (-width, 2 * width),
+                          random.randrange (-height, 2 * height))
+        cv.cvRectangle (image, pt1, pt2,
+                        random_color (random),
+                        random.randrange (-1, 9),
+                        line_type, 0)
+        
+        highgui.cvShowImage (window_name, image)
+        highgui.cvWaitKey (delay)
+
+    # draw some ellipes
+    for i in range (number):
+        pt1 = cv.cvPoint (random.randrange (-width, 2 * width),
+                          random.randrange (-height, 2 * height))
+        sz = cv.cvSize (random.randrange (0, 200),
+                        random.randrange (0, 200))
+        angle = random.randrange (0, 1000) * 0.180
+        cv.cvEllipse (image, pt1, sz, angle, angle - 100, angle + 200,
+                        random_color (random),
+                        random.randrange (-1, 9),
+                        line_type, 0)
+        
+        highgui.cvShowImage (window_name, image)
+        highgui.cvWaitKey (delay)
+
+    # init the list of polylines
+    nb_polylines = 2
+    polylines_size = 3
+    pt = [0,] * nb_polylines
+    for a in range (nb_polylines):
+        pt [a] = [0,] * polylines_size
+
+    # draw some polylines
+    for i in range (number):
+        for a in range (nb_polylines):
+            for b in range (polylines_size):
+                pt [a][b] = cv.cvPoint (random.randrange (-width, 2 * width),
+                                     random.randrange (-height, 2 * height))
+        cv.cvPolyLine (image, pt, 1,
+                       random_color (random),
+                       random.randrange (1, 9),
+                       line_type, 0)
+
+        highgui.cvShowImage (window_name, image)
+        highgui.cvWaitKey (delay)
+
+    # draw some filled polylines
+    for i in range (number):
+        for a in range (nb_polylines):
+            for b in range (polylines_size):
+                pt [a][b] = cv.cvPoint (random.randrange (-width, 2 * width),
+                                     random.randrange (-height, 2 * height))
+        cv.cvFillPoly (image, pt,
+                       random_color (random),
+                       line_type, 0)
+
+        highgui.cvShowImage (window_name, image)
+        highgui.cvWaitKey (delay)
+
+    # draw some circles
+    for i in range (number):
+        pt1 = cv.cvPoint (random.randrange (-width, 2 * width),
+                          random.randrange (-height, 2 * height))
+        cv.cvCircle (image, pt1, random.randrange (0, 300),
+                     random_color (random),
+                     random.randrange (-1, 9),
+                     line_type, 0)
+        
+        highgui.cvShowImage (window_name, image)
+        highgui.cvWaitKey (delay)
+
+    # draw some text
+    for i in range (number):
+        pt1 = cv.cvPoint (random.randrange (-width, 2 * width),
+                          random.randrange (-height, 2 * height))
+        font = cv.cvInitFont (random.randrange (0, 8),
+                              random.randrange (0, 100) * 0.05 + 0.01,
+                              random.randrange (0, 100) * 0.05 + 0.01,
+                              random.randrange (0, 5) * 0.1,
+                              random.randrange (0, 10),
+                              line_type)
+
+        cv.cvPutText (image, "Testing text rendering!",
+                      pt1, font,
+                      random_color (random))
+        
+        highgui.cvShowImage (window_name, image)
+        highgui.cvWaitKey (delay)
+
+    # 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 = (width - text_size.width) / 2
+    pt1.y = (height + text_size.height) / 2
+    image2 = cv.cvCloneImage(image)
+
+    # now, draw some OpenCV pub ;-)
+    for i in range (255):
+        cv.cvSubS (image2, cv.cvScalarAll (i), image, None)
+        cv.cvPutText (image, "OpenCV forever!",
+                      pt1, font, cv.cvScalar (255, i, i))
+        highgui.cvShowImage (window_name, image)
+        highgui.cvWaitKey (delay)
+
+    # wait some key to end
+    highgui.cvWaitKey (0)