#include <iostream>
#include <stdio.h>
 
 
const int NUMBER = 100;
const int DELAY = 5;
 
const int window_width = 900;
const int window_height = 600;
int x_1 = -window_width/2;
int x_2 = window_width*3/2;
int y_1 = -window_width/2;
int y_2 = window_width*3/2;
 
int Drawing_Random_Lines( 
Mat image, 
char* window_name, 
RNG rng );
 
int Drawing_Random_Rectangles( 
Mat image, 
char* window_name, 
RNG rng );
 
int Drawing_Random_Ellipses( 
Mat image, 
char* window_name, 
RNG rng );
 
int Drawing_Random_Polylines( 
Mat image, 
char* window_name, 
RNG rng );
 
int Drawing_Random_Filled_Polygons( 
Mat image, 
char* window_name, 
RNG rng );
 
int Drawing_Random_Circles( 
Mat image, 
char* window_name, 
RNG rng );
 
int Displaying_Random_Text( 
Mat image, 
char* window_name, 
RNG rng );
 
int Displaying_Big_End( 
Mat image, 
char* window_name, 
RNG rng );
 
 
 
{
  int c;
 
  char window_name[] = "Drawing_2 Tutorial";
 
 
  Mat image = Mat::zeros( window_height, window_width, 
CV_8UC3 );
 
  imshow( window_name, image );
  waitKey( DELAY );
 
  c = Drawing_Random_Lines(image, window_name, rng);
  if( c != 0 ) return 0;
 
  c = Drawing_Random_Rectangles(image, window_name, rng);
  if( c != 0 ) return 0;
 
  c = Drawing_Random_Ellipses( image, window_name, rng );
  if( c != 0 ) return 0;
 
  c = Drawing_Random_Polylines( image, window_name, rng );
  if( c != 0 ) return 0;
 
  c = Drawing_Random_Filled_Polygons( image, window_name, rng );
  if( c != 0 ) return 0;
 
  c = Drawing_Random_Circles( image, window_name, rng );
  if( c != 0 ) return 0;
 
  c = Displaying_Random_Text( image, window_name, rng );
  if( c != 0 ) return 0;
 
  c = Displaying_Big_End( image, window_name, rng );
  if( c != 0 ) return 0;
 
  waitKey(0);
  return 0;
}
 
 
{
  int icolor = (unsigned) rng;
  return Scalar( icolor&255, (icolor>>8)&255, (icolor>>16)&255 );
 
}
 
 
int Drawing_Random_Lines( 
Mat image, 
char* window_name, 
RNG rng )
 
{
 
  for( int i = 0; i < NUMBER; i++ )
  {
 
    line( image, pt1, pt2, randomColor(rng), rng.
uniform(1, 10), 8 );
 
      { return -1; }
  }
 
  return 0;
}
 
int Drawing_Random_Rectangles( 
Mat image, 
char* window_name, 
RNG rng )
 
{
  int lineType = 8;
  int thickness = rng.
uniform( -3, 10 );
 
 
  for( int i = 0; i < NUMBER; i++ )
  {
 
    rectangle( image, pt1, pt2, randomColor(rng), 
MAX( thickness, -1 ), lineType );
 
 
      { return -1; }
  }
 
  return 0;
}
 
int Drawing_Random_Ellipses( 
Mat image, 
char* window_name, 
RNG rng )
 
{
  int lineType = 8;
 
  for ( int i = 0; i < NUMBER; i++ )
  {
 
 
    double angle = rng.
uniform(0, 180);
 
 
    ellipse( image, center, axes, angle, angle - 100, angle + 200,
 
             randomColor(rng), rng.
uniform(-1,9), lineType );
 
 
      { return -1; }
  }
 
  return 0;
}
 
int Drawing_Random_Polylines( 
Mat image, 
char* window_name, 
RNG rng )
 
{
  int lineType = 8;
 
  for( int i = 0; i< NUMBER; i++ )
  {
 
    const Point* ppt[2] = {pt[0], pt[1]};
 
    int npt[] = {3, 3};
 
    polylines(image, ppt, npt, 2, 
true, randomColor(rng), rng.
uniform(1,10), lineType);
 
 
      { return -1; }
  }
  return 0;
}
 
int Drawing_Random_Filled_Polygons( 
Mat image, 
char* window_name, 
RNG rng )
 
{
  int lineType = 8;
 
  for ( int i = 0; i < NUMBER; i++ )
  {
 
    const Point* ppt[2] = {pt[0], pt[1]};
 
    int npt[] = {3, 3};
 
    fillPoly( image, ppt, npt, 2, randomColor(rng), lineType );
 
 
       { return -1; }
  }
  return 0;
}
 
int Drawing_Random_Circles( 
Mat image, 
char* window_name, 
RNG rng )
 
{
  int lineType = 8;
 
  for (int i = 0; i < NUMBER; i++)
  {
 
 
      { return -1; }
  }
 
  return 0;
}
 
int Displaying_Random_Text( 
Mat image, 
char* window_name, 
RNG rng )
 
{
  int lineType = 8;
 
  for ( int i = 1; i < NUMBER; i++ )
  {
 
             rng.
uniform(0,100)*0.05+0.1, randomColor(rng), rng.
uniform(1, 10), lineType);
 
      { return -1; }
  }
 
  return 0;
}
 
int Displaying_Big_End( 
Mat image, 
char* window_name, 
RNG )
 
{
  Size textsize = 
getTextSize(
"OpenCV forever!", FONT_HERSHEY_COMPLEX, 3, 5, 0);
 
  Point org((window_width - textsize.
width)/2, (window_height - textsize.
height)/2);
 
  int lineType = 8;
 
 
  for( int i = 0; i < 255; i += 2 )
  {
    image2 = image - Scalar::all(i);
    putText( image2, 
"OpenCV forever!", org, FONT_HERSHEY_COMPLEX, 3,
 
             Scalar(i, i, 255), 5, lineType );
 
 
    imshow( window_name, image2 );
 
       { return -1; }
  }
 
  return 0;
}
n-dimensional dense array class
Definition mat.hpp:830
_Tp y
y coordinate of the point
Definition types.hpp:202
_Tp x
x coordinate of the point
Definition types.hpp:201
Random Number Generator.
Definition core.hpp:2879
int uniform(int a, int b)
returns uniformly distributed integer random number from [a,b) range
Template class for specifying the size of an image or rectangle.
Definition types.hpp:335
_Tp height
the height
Definition types.hpp:363
_Tp width
the width
Definition types.hpp:362
#define CV_8UC3
Definition interface.h:90
#define MAX(a, b)
Definition cvdef.h:518
@ circle
Definition gr_skig.hpp:62
void imshow(const String &winname, InputArray mat)
Displays an image in the specified window.
int waitKey(int delay=0)
Waits for a pressed key.
void rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
Draws a simple, thick, or filled up-right rectangle.
void ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, double endAngle, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
Draws a simple or thick elliptic arc or fills an ellipse sector.
void fillPoly(InputOutputArray img, InputArrayOfArrays pts, const Scalar &color, int lineType=LINE_8, int shift=0, Point offset=Point())
Fills the area bounded by one or more polygons.
Size getTextSize(const String &text, int fontFace, double fontScale, int thickness, int *baseLine)
Calculates the width and height of a text string.
void putText(InputOutputArray img, const String &text, Point org, int fontFace, double fontScale, Scalar color, int thickness=1, int lineType=LINE_8, bool bottomLeftOrigin=false)
Draws a text string.
void line(InputOutputArray img, Point pt1, Point pt2, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
Draws a line segment connecting two points.
void polylines(InputOutputArray img, InputArrayOfArrays pts, bool isClosed, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
Draws several polygonal curves.
int main(int argc, char *argv[])
Definition highgui_qt.cpp:3