【OpenCV】绘制简单图形

来源:互联网 发布:保险资产管理公司 知乎 编辑:程序博客网 时间:2024/05/16 14:14

线条、椭圆、矩形、圆、多边形

线条line()void cv::line   (   InputOutputArray    img,                    Point   pt1,                    Point   pt2,                    const Scalar &  color,                    int     thickness = 1,                    int     lineType = LINE_8,                    int     shift = 0 ) 椭圆ellipse() void cv::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 ) 矩形rectangle() void cv::rectangle  (   InputOutputArray    img,                        Point   pt1,                        Point   pt2,                        const Scalar &  color,                        int     thickness = 1,                        int     lineType = LINE_8,                        int     shift = 0 ) 圆circle()void cv::circle (   InputOutputArray    img,                    Point   center,                    int     radius,                    const Scalar &  color,                    int     thickness = 1,                    int     lineType = LINE_8,                    int     shift = 0 ) 多边形fillPoly()void cv::fillPoly   (   Mat &   img,                        const Point **  pts,                        const int *     npts,                        int     ncontours,                        const Scalar &  color,                        int     lineType = LINE_8,                        int     shift = 0,                        Point   offset = Point() )  

代码示例

#include <opencv2/core.hpp>#include <opencv2/imgproc.hpp>#include <opencv2/highgui.hpp>#define w 400using namespace cv;void MyEllipse(Mat img, double angle);void MyFilledCircle(Mat img, Point center);void MyPolygon(Mat img);void MyRect(Mat img);void MyLine(Mat img, Point start, Point end);int main(void){    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);                                              // 多边形    MyRect(rook_image);                                                 // 矩形    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));    char atom_window[] = "Drawing 1:Atom";    char rook_window[] = "Drawing 2:Rook";    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 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 MyRect(Mat img){    rectangle(img,        Point(0, 7 * w / 8),        Point(w, w),        Scalar(0, 255, 255),        FILLED,        LINE_8);}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);}


运行结果