How to draw geometric figures with C++ OpenCV
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!