opencv4 学习 05 绘制几何图形和文字

1、常用的几何图形绘制函数

  • line();
  • ellipse();
  • rectangle();
  • circle();
  • fillPoly();
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#define w 400
using namespace cv;

void myEllipse(Mat img, double angle);
void myFilledCircle(Mat img, Point cneter);
void myPolygon(Mat img);
void myLine(Mat img, Point start, Point end);

int main(int argc, char** argv)
{    
    Mat image = imread("G:\\tools\\opencv4\\workspace\\opencv01\\001.jpg");
    
    // 定义点的方式
    //Point pt; pt.x = 10; pt.y = 8;
    //Point pt(10, 8);

    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(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); // Wait for a keystroke in the window
    return 0;
}

void myEllipse(Mat img, double angle) {
    int thickness = 2;
    int lineType = 8;
    // 椭圆中心,椭圆的长短轴,椭圆的倾斜角,绘制的圆弧范围(0,360,表示绘制整个椭圆圆弧)
    ellipse(img, Point(w / 2, w / 2), Size(w / 4, w / 16), angle, 0, 360, Scalar(255, 0, 0), thickness, lineType);
}
void myFilledCircle(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, 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, w / 8);
    rook_points[0][7] = Point(26 * w / 40, w / 8);
    rook_points[0][8] = Point(26 * w / 40, w / 4);
    rook_points[0][9] = Point(22 * w / 40, w / 4);
    rook_points[0][10] = Point(22 * w / 40, w / 8);
    rook_points[0][11] = Point(18 * w / 40, w / 8);
    rook_points[0][12] = Point(18 * w / 40, w / 4);
    rook_points[0][13] = Point(14 * w / 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, 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(w / 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 thichness = 2;
    int lineType = LINE_8;

    line(img, start, end, Scalar(0, 0, 0), thichness, lineType);
}

 

2. 绘制文字

 

posted @ 2020-08-11 00:45  blackx  阅读(130)  评论(0编辑  收藏  举报