mirror of
https://github.com/opencv/opencv.git
synced 2024-12-02 07:39:57 +08:00
162 lines
4.6 KiB
Mathematica
162 lines
4.6 KiB
Mathematica
|
#! /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);
|
||
|
|