#! /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)