#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 教程";
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;
}
_Tp y
点的 y 坐标
定义 types.hpp:202
_Tp x
点的 x 坐标
定义 types.hpp:201
int uniform(int a, int b)
返回从 [a,b) 范围均匀分布的整数随机数
用于指定图像或矩形大小的模板类。
定义 types.hpp:335
_Tp height
高度
定义 types.hpp:363
_Tp width
宽度
定义 types.hpp:362
#define CV_8UC3
定义 interface.h:90
#define MAX(a, b)
定义 cvdef.h:517
@ circle
定义 gr_skig.hpp:62
void imshow(const String &winname, InputArray mat)
在指定的窗口中显示图像。
int waitKey(int delay=0)
等待按键按下。
void rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
绘制一个简单的、粗的或填充的直立矩形。
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)
绘制一个简单或粗的椭圆弧,或填充一个椭圆扇区。
void fillPoly(InputOutputArray img, InputArrayOfArrays pts, const Scalar &color, int lineType=LINE_8, int shift=0, Point offset=Point())
填充一个或多个多边形包围的区域。
Size getTextSize(const String &text, int fontFace, double fontScale, int thickness, int *baseLine)
计算文本字符串的宽度和高度。
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)
绘制一个文本字符串。
void line(InputOutputArray img, Point pt1, Point pt2, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
绘制连接两点的线段。
void polylines(InputOutputArray img, InputArrayOfArrays pts, bool isClosed, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
绘制多个多边形曲线。
int main(int argc, char *argv[])
定义 highgui_qt.cpp:3
磁盘上文件的存储关联的“黑盒子”表示。
定义 core.hpp:102