1793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**
2793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @file Drawing_2.cpp
3793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @brief Simple sample code
4793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
5793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
6793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include <opencv2/core.hpp>
7793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include <opencv2/imgproc.hpp>
8793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include <opencv2/highgui.hpp>
9793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include <iostream>
10793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include <stdio.h>
11793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
12793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerusing namespace cv;
13793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
14793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/// Global Variables
15793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerconst int NUMBER = 100;
16793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerconst int DELAY = 5;
17793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
18793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerconst int window_width = 900;
19793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerconst int window_height = 600;
20793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint x_1 = -window_width/2;
21793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint x_2 = window_width*3/2;
22793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint y_1 = -window_width/2;
23793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint y_2 = window_width*3/2;
24793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
25793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/// Function headers
26793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerstatic Scalar randomColor( RNG& rng );
27793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint Drawing_Random_Lines( Mat image, char* window_name, RNG rng );
28793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint Drawing_Random_Rectangles( Mat image, char* window_name, RNG rng );
29793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint Drawing_Random_Ellipses( Mat image, char* window_name, RNG rng );
30793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint Drawing_Random_Polylines( Mat image, char* window_name, RNG rng );
31793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint Drawing_Random_Filled_Polygons( Mat image, char* window_name, RNG rng );
32793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint Drawing_Random_Circles( Mat image, char* window_name, RNG rng );
33793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint Displaying_Random_Text( Mat image, char* window_name, RNG rng );
34793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint Displaying_Big_End( Mat image, char* window_name, RNG rng );
35793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
36793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
37793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**
38793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @function main
39793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
40793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint main( void )
41793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
42793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  int c;
43793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
44793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  /// Start creating a window
45793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  char window_name[] = "Drawing_2 Tutorial";
46793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
47793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  /// Also create a random object (RNG)
48793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  RNG rng( 0xFFFFFFFF );
49793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
50793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  /// Initialize a matrix filled with zeros
51793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  Mat image = Mat::zeros( window_height, window_width, CV_8UC3 );
52793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  /// Show it in a window during DELAY ms
53793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  imshow( window_name, image );
54793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  waitKey( DELAY );
55793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
56793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  /// Now, let's draw some lines
57793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  c = Drawing_Random_Lines(image, window_name, rng);
58793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  if( c != 0 ) return 0;
59793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
60793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  /// Go on drawing, this time nice rectangles
61793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  c = Drawing_Random_Rectangles(image, window_name, rng);
62793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  if( c != 0 ) return 0;
63793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
64793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  /// Draw some ellipses
65793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  c = Drawing_Random_Ellipses( image, window_name, rng );
66793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  if( c != 0 ) return 0;
67793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
68793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  /// Now some polylines
69793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  c = Drawing_Random_Polylines( image, window_name, rng );
70793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  if( c != 0 ) return 0;
71793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
72793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  /// Draw filled polygons
73793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  c = Drawing_Random_Filled_Polygons( image, window_name, rng );
74793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  if( c != 0 ) return 0;
75793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
76793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  /// Draw circles
77793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  c = Drawing_Random_Circles( image, window_name, rng );
78793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  if( c != 0 ) return 0;
79793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
80793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  /// Display text in random positions
81793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  c = Displaying_Random_Text( image, window_name, rng );
82793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  if( c != 0 ) return 0;
83793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
84793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  /// Displaying the big end!
85793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  c = Displaying_Big_End( image, window_name, rng );
86793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  if( c != 0 ) return 0;
87793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
88793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  waitKey(0);
89793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  return 0;
90793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
91793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
92793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/// Function definitions
93793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
94793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**
95793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @function randomColor
96793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @brief Produces a random color given a random object
97793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
98793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerstatic Scalar randomColor( RNG& rng )
99793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
100793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  int icolor = (unsigned) rng;
101793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  return Scalar( icolor&255, (icolor>>8)&255, (icolor>>16)&255 );
102793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
103793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
104793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
105793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**
106793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @function Drawing_Random_Lines
107793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
108793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint Drawing_Random_Lines( Mat image, char* window_name, RNG rng )
109793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
110793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  Point pt1, pt2;
111793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
112793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  for( int i = 0; i < NUMBER; i++ )
113793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  {
114793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt1.x = rng.uniform( x_1, x_2 );
115793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt1.y = rng.uniform( y_1, y_2 );
116793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt2.x = rng.uniform( x_1, x_2 );
117793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt2.y = rng.uniform( y_1, y_2 );
118793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
119793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    line( image, pt1, pt2, randomColor(rng), rng.uniform(1, 10), 8 );
120793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    imshow( window_name, image );
121793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    if( waitKey( DELAY ) >= 0 )
122793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      { return -1; }
123793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  }
124793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
125793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  return 0;
126793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
127793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
128793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**
129793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @function Drawing_Rectangles
130793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
131793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint Drawing_Random_Rectangles( Mat image, char* window_name, RNG rng )
132793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
133793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  Point pt1, pt2;
134793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  int lineType = 8;
135793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  int thickness = rng.uniform( -3, 10 );
136793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
137793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  for( int i = 0; i < NUMBER; i++ )
138793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  {
139793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt1.x = rng.uniform( x_1, x_2 );
140793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt1.y = rng.uniform( y_1, y_2 );
141793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt2.x = rng.uniform( x_1, x_2 );
142793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt2.y = rng.uniform( y_1, y_2 );
143793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
144793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    rectangle( image, pt1, pt2, randomColor(rng), MAX( thickness, -1 ), lineType );
145793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
146793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    imshow( window_name, image );
147793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    if( waitKey( DELAY ) >= 0 )
148793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      { return -1; }
149793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  }
150793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
151793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  return 0;
152793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
153793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
154793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**
155793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @function Drawing_Random_Ellipses
156793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
157793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint Drawing_Random_Ellipses( Mat image, char* window_name, RNG rng )
158793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
159793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  int lineType = 8;
160793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
161793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  for ( int i = 0; i < NUMBER; i++ )
162793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  {
163793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    Point center;
164793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    center.x = rng.uniform(x_1, x_2);
165793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    center.y = rng.uniform(y_1, y_2);
166793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
167793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    Size axes;
168793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    axes.width = rng.uniform(0, 200);
169793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    axes.height = rng.uniform(0, 200);
170793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
171793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    double angle = rng.uniform(0, 180);
172793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
173793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    ellipse( image, center, axes, angle, angle - 100, angle + 200,
174793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler             randomColor(rng), rng.uniform(-1,9), lineType );
175793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
176793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    imshow( window_name, image );
177793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
178793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    if( waitKey(DELAY) >= 0 )
179793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      { return -1; }
180793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  }
181793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
182793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  return 0;
183793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
184793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
185793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**
186793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @function Drawing_Random_Polylines
187793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
188793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint Drawing_Random_Polylines( Mat image, char* window_name, RNG rng )
189793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
190793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  int lineType = 8;
191793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
192793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  for( int i = 0; i< NUMBER; i++ )
193793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  {
194793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    Point pt[2][3];
195793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[0][0].x = rng.uniform(x_1, x_2);
196793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[0][0].y = rng.uniform(y_1, y_2);
197793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[0][1].x = rng.uniform(x_1, x_2);
198793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[0][1].y = rng.uniform(y_1, y_2);
199793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[0][2].x = rng.uniform(x_1, x_2);
200793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[0][2].y = rng.uniform(y_1, y_2);
201793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[1][0].x = rng.uniform(x_1, x_2);
202793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[1][0].y = rng.uniform(y_1, y_2);
203793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[1][1].x = rng.uniform(x_1, x_2);
204793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[1][1].y = rng.uniform(y_1, y_2);
205793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[1][2].x = rng.uniform(x_1, x_2);
206793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[1][2].y = rng.uniform(y_1, y_2);
207793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
208793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    const Point* ppt[2] = {pt[0], pt[1]};
209793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int npt[] = {3, 3};
210793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
211793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    polylines(image, ppt, npt, 2, true, randomColor(rng), rng.uniform(1,10), lineType);
212793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
213793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    imshow( window_name, image );
214793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    if( waitKey(DELAY) >= 0 )
215793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      { return -1; }
216793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  }
217793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  return 0;
218793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
219793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
220793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**
221793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @function Drawing_Random_Filled_Polygons
222793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
223793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint Drawing_Random_Filled_Polygons( Mat image, char* window_name, RNG rng )
224793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
225793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  int lineType = 8;
226793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
227793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  for ( int i = 0; i < NUMBER; i++ )
228793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  {
229793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    Point pt[2][3];
230793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[0][0].x = rng.uniform(x_1, x_2);
231793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[0][0].y = rng.uniform(y_1, y_2);
232793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[0][1].x = rng.uniform(x_1, x_2);
233793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[0][1].y = rng.uniform(y_1, y_2);
234793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[0][2].x = rng.uniform(x_1, x_2);
235793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[0][2].y = rng.uniform(y_1, y_2);
236793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[1][0].x = rng.uniform(x_1, x_2);
237793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[1][0].y = rng.uniform(y_1, y_2);
238793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[1][1].x = rng.uniform(x_1, x_2);
239793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[1][1].y = rng.uniform(y_1, y_2);
240793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[1][2].x = rng.uniform(x_1, x_2);
241793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    pt[1][2].y = rng.uniform(y_1, y_2);
242793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
243793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    const Point* ppt[2] = {pt[0], pt[1]};
244793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    int npt[] = {3, 3};
245793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
246793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    fillPoly( image, ppt, npt, 2, randomColor(rng), lineType );
247793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
248793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    imshow( window_name, image );
249793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    if( waitKey(DELAY) >= 0 )
250793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler       { return -1; }
251793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  }
252793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  return 0;
253793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
254793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
255793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**
256793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @function Drawing_Random_Circles
257793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
258793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint Drawing_Random_Circles( Mat image, char* window_name, RNG rng )
259793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
260793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  int lineType = 8;
261793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
262793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  for (int i = 0; i < NUMBER; i++)
263793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  {
264793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    Point center;
265793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    center.x = rng.uniform(x_1, x_2);
266793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    center.y = rng.uniform(y_1, y_2);
267793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
268793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    circle( image, center, rng.uniform(0, 300), randomColor(rng),
269793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler            rng.uniform(-1, 9), lineType );
270793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
271793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    imshow( window_name, image );
272793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    if( waitKey(DELAY) >= 0 )
273793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      { return -1; }
274793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  }
275793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
276793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  return 0;
277793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
278793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
279793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**
280793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @function Displaying_Random_Text
281793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
282793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint Displaying_Random_Text( Mat image, char* window_name, RNG rng )
283793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
284793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  int lineType = 8;
285793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
286793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  for ( int i = 1; i < NUMBER; i++ )
287793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  {
288793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    Point org;
289793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    org.x = rng.uniform(x_1, x_2);
290793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    org.y = rng.uniform(y_1, y_2);
291793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
292793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    putText( image, "Testing text rendering", org, rng.uniform(0,8),
293793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler             rng.uniform(0,100)*0.05+0.1, randomColor(rng), rng.uniform(1, 10), lineType);
294793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
295793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    imshow( window_name, image );
296793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    if( waitKey(DELAY) >= 0 )
297793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler      { return -1; }
298793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  }
299793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
300793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  return 0;
301793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
302793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
303793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler/**
304793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler * @function Displaying_Big_End
305793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler */
306793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint Displaying_Big_End( Mat image, char* window_name, RNG )
307793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{
308793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  Size textsize = getTextSize("OpenCV forever!", FONT_HERSHEY_COMPLEX, 3, 5, 0);
309793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  Point org((window_width - textsize.width)/2, (window_height - textsize.height)/2);
310793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  int lineType = 8;
311793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
312793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  Mat image2;
313793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
314793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  for( int i = 0; i < 255; i += 2 )
315793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  {
316793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    image2 = image - Scalar::all(i);
317793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    putText( image2, "OpenCV forever!", org, FONT_HERSHEY_COMPLEX, 3,
318793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler             Scalar(i, i, 255), 5, lineType );
319793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
320793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    imshow( window_name, image2 );
321793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler    if( waitKey(DELAY) >= 0 )
322793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler       { return -1; }
323793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  }
324793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler
325793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler  return 0;
326793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}
327