. Basic Drawing of OpenCv

示例代码1:
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>

#include

#define w 400

using namespace cv;
using namespace std;

void MyEllipse(Mat img, double angle);
void MyFilledCicle(Mat img, Point center);
void MyPolygon(Mat img);
void MyLine(Mat img, Point start, Point end);

int main(void)
{
char atom_window[] = “Drawing 1: Atom”;
char rook_window[] = “Drawing 2: Rook”;

Mat atom_image = Mat::zeros(w, w, CV_8UC3);
Mat rook_image = Mat::zeros(w, w, CV_8UC3);

MyEllipse(atom_image, 90);
MyEllipse(atom_image, 0);
MyEllipse(atom_image, 45);
MyEllipse(atom_image, -45);

MyFilledCicle(atom_image, Point(w/2, w/2));

MyPolygon(rook_image);

rectangle(rook_image,
		Point(0, 7*w/8),
		Point(w, w),
		Scalar(0, 255, 255),
		FILLED,
		LINE_8);
MyLine(rook_image, Point(0, 15*w/16), Point(w, 15*w/16));
MyLine(rook_image, Point(w/4, 7*w/8), Point(w/4, w));
MyLine(rook_image, Point(w/2, 7*w/8), Point(w/2, w));
MyLine(rook_image, Point(3*w/4, 7*w/8), Point(3*w/4, w));

imshow(atom_window, atom_image);
moveWindow(atom_window, 0, 200);
imshow(rook_window, rook_image);
moveWindow(rook_window, w, 200);
waitKey(0);

return 0;

}

void MyEllipse(Mat img, double angle)
{
int thickness = 2;
int lineType = 8;

ellipse(img,
		Point(w/2, w/2),
		Size(w/4, w/16),
		angle,
		0,
		360,
		Scalar(255, 0, 0),
		thickness,
		lineType);

}

void MyFilledCicle(Mat img, Point center)
{
circle(img,
center,
w/32,
Scalar(0, 0, 255),
FILLED,
LINE_8);
}

void MyPolygon(Mat img)
{
int lineType = LINE_8;
Point rook_points[1][20];
rook_points[0][0] = Point( w/4, 7w/8 );
rook_points[0][1] = Point( 3
w/4, 7w/8 );
rook_points[0][2] = Point( 3
w/4, 13w/16 );
rook_points[0][3] = Point( 11
w/16, 13w/16 );
rook_points[0][4] = Point( 19
w/32, 3w/8 );
rook_points[0][5] = Point( 3
w/4, 3w/8 );
rook_points[0][6] = Point( 3
w/4, w/8 );
rook_points[0][7] = Point( 26w/40, w/8 );
rook_points[0][8] = Point( 26
w/40, w/4 );
rook_points[0][9] = Point( 22w/40, w/4 );
rook_points[0][10] = Point( 22
w/40, w/8 );
rook_points[0][11] = Point( 18w/40, w/8 );
rook_points[0][12] = Point( 18
w/40, w/4 );
rook_points[0][13] = Point( 14w/40, w/4 );
rook_points[0][14] = Point( 14
w/40, w/8 );
rook_points[0][15] = Point( w/4, w/8 );
rook_points[0][16] = Point( w/4, 3w/8 );
rook_points[0][17] = Point( 13
w/32, 3w/8 );
rook_points[0][18] = Point( 5
w/16, 13w/16 );
rook_points[0][19] = Point( w/4, 13
w/16 );
// cout << "rook_points[0][0] = " << rook_points[0][0] << endl;
const Point* ppt[1] = { rook_points[0] };
cout << "ppt = " << *ppt[0] << endl;
int npt[] = { 20 };
cout << "npt = " << npt[0] << endl;
fillPoly( img,
ppt,
npt,
1,
Scalar( 255, 255, 255 ),
lineType );
}

void MyLine(Mat img, Point start, Point end)
{
int thickness = 2;
int lineType = LINE_8;

line(img,
	start,
	end,
	Scalar(0, 0, 0),
	thickness,
	lineType);

}

示例代码2:
/**

  • @file Drawing_2.cpp
  • @brief Simple sample code
    */

#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include
#include <stdio.h>

using namespace cv;

/// Global Variables
const int NUMBER = 100;
const int DELAY = 10;

const int window_width = 900;
const int window_height = 600;
int x_1 = -window_width/2;
int x_2 = window_width3/2;
int y_1 = -window_width/2;
int y_2 = window_width
3/2;

/// Function headers
static Scalar randomColor( RNG& rng );
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 );

/**

  • @function main
    */
    int main( void )
    {
    int c;

/// Start creating a window
char window_name[] = “Drawing_2 Tutorial”;

/// Also create a random object (RNG)
RNG rng( 0xFFFFFFFF ); // RNG类随机生成随机数,默认种子0xFFFFFFFF

/// Initialize a matrix filled with zeros
Mat image = Mat::zeros( window_height, window_width, CV_8UC3 );
/// Show it in a window during DELAY ms
imshow( window_name, image );
waitKey( DELAY );

/// Now, let’s draw some lines
c = Drawing_Random_Lines(image, window_name, rng);
if( c != 0 ) return 0;

/// Go on drawing, this time nice rectangles
c = Drawing_Random_Rectangles(image, window_name, rng);
if( c != 0 ) return 0;

/// Draw some ellipses
c = Drawing_Random_Ellipses( image, window_name, rng );
if( c != 0 ) return 0;

/// Now some polylines
c = Drawing_Random_Polylines( image, window_name, rng );
if( c != 0 ) return 0;

/// Draw filled polygons
c = Drawing_Random_Filled_Polygons( image, window_name, rng );
if( c != 0 ) return 0;

/// Draw circles
c = Drawing_Random_Circles( image, window_name, rng );
if( c != 0 ) return 0;

/// Display text in random positions
c = Displaying_Random_Text( image, window_name, rng );
if( c != 0 ) return 0;

/// Displaying the big end!
c = Displaying_Big_End( image, window_name, rng );
if( c != 0 ) return 0;

waitKey(0);
return 0;
}

/// Function definitions

/**

  • @function randomColor
  • @brief Produces a random color given a random object
    */
    static Scalar randomColor( RNG& rng )
    {
    int icolor = (unsigned) rng;
    return Scalar( icolor&255, (icolor>>8)&255, (icolor>>16)&255 ); // &按位与
    }

/**

  • @function Drawing_Random_Lines
    /
    int Drawing_Random_Lines( Mat image, char
    window_name, RNG rng )
    {
    Point pt1, pt2;

for( int i = 0; i < NUMBER; i++ )
{
pt1.x = rng.uniform( x_1, x_2 ); // [x_1, x_2)内均匀随机生成值
pt1.y = rng.uniform( y_1, y_2 );
pt2.x = rng.uniform( x_1, x_2 );
pt2.y = rng.uniform( y_1, y_2 );

line( image, pt1, pt2, randomColor(rng), rng.uniform(1, 10), 8 );
imshow( window_name, image );
if( waitKey( DELAY ) >= 0 )
  { return -1; }

}

return 0;
}

/**

  • @function Drawing_Rectangles
    /
    int Drawing_Random_Rectangles( Mat image, char
    window_name, RNG rng )
    {
    Point pt1, pt2;
    int lineType = 8;
    int thickness = rng.uniform( -3, 10 );

for( int i = 0; i < NUMBER; i++ )
{
pt1.x = rng.uniform( x_1, x_2 );
pt1.y = rng.uniform( y_1, y_2 );
pt2.x = rng.uniform( x_1, x_2 );
pt2.y = rng.uniform( y_1, y_2 );

rectangle( image, pt1, pt2, randomColor(rng), MAX( thickness, -1 ), lineType );

imshow( window_name, image );
if( waitKey( DELAY ) >= 0 )
  { return -1; }

}

return 0;
}

/**

  • @function Drawing_Random_Ellipses
    /
    int Drawing_Random_Ellipses( Mat image, char
    window_name, RNG rng )
    {
    int lineType = 8;

for ( int i = 0; i < NUMBER; i++ )
{
Point center;
center.x = rng.uniform(x_1, x_2);
center.y = rng.uniform(y_1, y_2);

Size axes;
axes.width = rng.uniform(0, 200);
axes.height = rng.uniform(0, 200);

double angle = rng.uniform(0, 180);

ellipse( image, center, axes, angle, angle - 100, angle + 200,
         randomColor(rng), rng.uniform(-1,9), lineType );

imshow( window_name, image );

if( waitKey(DELAY) >= 0 )
  { return -1; }

}

return 0;
}

/**

  • @function Drawing_Random_Polylines
    /
    int Drawing_Random_Polylines( Mat image, char
    window_name, RNG rng )
    {
    int lineType = 8;

for( int i = 0; i< NUMBER; i++ )
{
Point pt[2][3];
pt[0][0].x = rng.uniform(x_1, x_2);
pt[0][0].y = rng.uniform(y_1, y_2);
pt[0][1].x = rng.uniform(x_1, x_2);
pt[0][1].y = rng.uniform(y_1, y_2);
pt[0][2].x = rng.uniform(x_1, x_2);
pt[0][2].y = rng.uniform(y_1, y_2);
pt[1][0].x = rng.uniform(x_1, x_2);
pt[1][0].y = rng.uniform(y_1, y_2);
pt[1][1].x = rng.uniform(x_1, x_2);
pt[1][1].y = rng.uniform(y_1, y_2);
pt[1][2].x = rng.uniform(x_1, x_2);
pt[1][2].y = rng.uniform(y_1, y_2);

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);

imshow( window_name, image );
if( waitKey(DELAY) >= 0 )
  { return -1; }

}
return 0;
}

/**

  • @function Drawing_Random_Filled_Polygons
    /
    int Drawing_Random_Filled_Polygons( Mat image, char
    window_name, RNG rng )
    {
    int lineType = 8;

for ( int i = 0; i < NUMBER; i++ )
{
Point pt[2][3];
pt[0][0].x = rng.uniform(x_1, x_2);
pt[0][0].y = rng.uniform(y_1, y_2);
pt[0][1].x = rng.uniform(x_1, x_2);
pt[0][1].y = rng.uniform(y_1, y_2);
pt[0][2].x = rng.uniform(x_1, x_2);
pt[0][2].y = rng.uniform(y_1, y_2);
pt[1][0].x = rng.uniform(x_1, x_2);
pt[1][0].y = rng.uniform(y_1, y_2);
pt[1][1].x = rng.uniform(x_1, x_2);
pt[1][1].y = rng.uniform(y_1, y_2);
pt[1][2].x = rng.uniform(x_1, x_2);
pt[1][2].y = rng.uniform(y_1, y_2);

const Point* ppt[2] = {pt[0], pt[1]};
int npt[] = {3, 3};

fillPoly( image, ppt, npt, 2, randomColor(rng), lineType );

imshow( window_name, image );
if( waitKey(DELAY) >= 0 )
   { return -1; }

}
return 0;
}

/**

  • @function Drawing_Random_Circles
    /
    int Drawing_Random_Circles( Mat image, char
    window_name, RNG rng )
    {
    int lineType = 8;

for (int i = 0; i < NUMBER; i++)
{
Point center;
center.x = rng.uniform(x_1, x_2);
center.y = rng.uniform(y_1, y_2);

circle( image, center, rng.uniform(0, 300), randomColor(rng),
        rng.uniform(-1, 9), lineType );

imshow( window_name, image );
if( waitKey(DELAY) >= 0 )
  { return -1; }

}

return 0;
}

/**

  • @function Displaying_Random_Text
    /
    int Displaying_Random_Text( Mat image, char
    window_name, RNG rng )
    {
    int lineType = 8;

for ( int i = 1; i < NUMBER; i++ )
{
Point org;
org.x = rng.uniform(x_1, x_2);
org.y = rng.uniform(y_1, y_2);

putText( image, "Testing text rendering", org, rng.uniform(0,8),
         rng.uniform(0,100)*0.05+0.1, randomColor(rng), rng.uniform(1, 10), lineType);

imshow( window_name, image );
if( waitKey(DELAY) >= 0 )
  { return -1; }

}

return 0;
}

/**

  • @function Displaying_Big_End
    /
    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;

Mat image2;

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 );
if( waitKey(DELAY) >= 0 )
   { return -1; }

}

return 0;
}

发布了43 篇原创文章 · 获赞 0 · 访问量 400

猜你喜欢

转载自blog.csdn.net/weixin_42505877/article/details/103956409
今日推荐