Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

How to draw geometric figures with C++ OpenCV

2025-02-22 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >

Share

Shulou(Shulou.com)06/02 Report--

This article introduces the relevant knowledge of "how to draw geometry with C++ OpenCV". In the operation of practical cases, many people will encounter such a dilemma, so let the editor lead you to learn how to deal with these situations. I hope you can read it carefully and be able to achieve something!

The details are as follows

Draw geometry

Straight line

Rectangle

Polygon

Circle

Ellipse

Words

API

Straight line

CV_EXPORTS_W void line (InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0)

Rectangle

CV_EXPORTS_W void rectangle (InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0)

The upper function determines the location and size of the rectangle through two points, and the lower function is determined by the rectangular object Rect.

CV_EXPORTS_W void rectangle (InputOutputArray img, Rect rec, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0)

Polygon

CV_EXPORTS void polylines (InputOutputArray img, const Point* const* pts, const int* npts, int ncontours, bool isClosed, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0) CV_EXPORTS_W void polylines (InputOutputArray img, InputArrayOfArrays pts, bool isClosed, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0)

Circle

CV_EXPORTS_W void circle (InputOutputArray img, Point center, int radius, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0)

Ellipse

CV_EXPORTS_W void ellipse (InputOutputArray img, const RotatedRect& box, const Scalar& color, int thickness = 1, int lineType = LINE_8); CV_EXPORTS_W 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)

Words

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

Example

Official example 1

# include # define w 400using namespace cv;void MyEllipse (Mat img, double angle); void MyFilledCircle (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); MyFilledCircle (atom_image, Point (whammer 2, wMyEllipse 2); MyPolygon (rook_image) Rectangle (rook_image, Point (0, 7*w/8), Point (w, w), Scalar (0255,255), FILLED, LINE_8); MyLine (rook_image, Point (0, 15*w/16), Point (w, 15*w/16)) MyLine (rook_image, Point (wAccord 4, 7*w/8), Point (wamp4, w); MyLine (rook_image, Point (wamp2, 7*w/8), Point (wUnip 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, 0200) Imshow (rook_window, rook_image); moveWindow (rook_window, W200); waitKey (0); return (0);} void MyEllipse (Mat img, double angle) {int thickness = 2; int lineType = 8 Ellipse (img, Point (wAccord 2, wAccord 2), Size (wAccord 4, wAccord 16), angle, 0360, Scalar (255,0,0), thickness, lineType) } void MyFilledCircle (Mat img, Point center) {circle (img, center, wvoid MyPolygon 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 (wamp4, 7*w/8) Rook_points [0] [1] = Point (3*w/4, 7*w/8); rook_points [0] [2] = Point (3*w/4, 13*w/16); rook_points [0] [3] = Point (11*w/16, 13*w/16); rook_points [0] [4] = Point (19*w/32, 3*w/8) Rook_points [0] [5] = Point (3*w/4, 3*w/8); rook_points [0] [6] = Point (3*w/4, wmax 8); rook_points [0] [7] = Point (26*w/40, wmax 8); rook_points [0] [8] = Point (26*w/40, wmax 4) Rook_points [0] [9] = Point (22*w/40, wamp4); rook_points [0] [10] = Point (22*w/40, wamp8); rook_points [0] [11] = Point (18*w/40, wamp8); rook_points [0] [12] = Point (18*w/40, wamp4) Rook_points [0] [13] = Point (14*w/40, wamp4); rook_points [0] [14] = Point (14*w/40, wamp8); rook_points [0] [15] = Point (wamp4, wamp8); rook_points [0] [16] = Point (wamp4, 3*w/8) Rook_points [0] [17] = Point (13*w/32, 3*w/8); rook_points [0] [18] = Point (5*w/16, 13*w/16); rook_points [0] [19] = Point (wbank 4, 13*w/16); const Point* ppt [1] = {rook_points [0]}; int npt [] = {20} 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);}

Official example two

# include # include using namespace cv;const int NUMBER = 100 per Const int DELAY = 5 per Const int window_width = 900 per Const int window_height = 600 politics int Xue1 =-window_width/2;int Xue2 = window_width*3/2;int Yao2 = window_width*3/2;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); int main (void) {int c; char window_name [] = "Drawing_2 Tutorial"; RNG rng (0xFFFFFFFF); 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;} static Scalar randomColor (RNG& rng) {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) {Point pt1, pt2; 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 ); line( image, pt1, pt2, randomColor(rng), rng.uniform(1, 10), 8 ); imshow( window_name, image ); if( waitKey( DELAY ) >

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

This is the end of the content of "how to draw Geometry with C++ OpenCV". Thank you for reading. If you want to know more about the industry, you can follow the website, the editor will output more high-quality practical articles for you!

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Development

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report