OpenCV之基本图形绘制

#include "mainwindow.h"
#include <QApplication>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;

#define WINDOWS_WTDTH 600 //窗口
//将Ellipse画到img上
void DrawEllipse(Mat img, double angle)
{
    int thickness = 2;
    int lineType = 8;

    ellipse(img,
            Point(WINDOWS_WTDTH/2, WINDOWS_WTDTH/2), //椭圆中心
            Size(WINDOWS_WTDTH/4, WINDOWS_WTDTH/16),  //大小位于矩形内
            angle,  //旋转角度
            0,
            360,  //扩展弧度:0-360°
            Scalar(255, 129, 0),  //颜色:蓝色  BGR
            thickness,  //线宽
            lineType);  //线形
}

void DrawFilledCircle(Mat img, Point center)
{
    int thickness = -1;  //因此圆是实心的
    int lineType = 8;

    circle(img,
           center, //圆心
           WINDOWS_WTDTH/32, //半径
           Scalar(0, 0, 255),  //颜色:红色  BGR
           thickness,  //线宽
           lineType);  //线形
}

void DrawLine(Mat img, Point start, Point end)
{
    int thickness = 2;  //因此圆是实心的
    int lineType = 8;

    line(img,
         start,  //开始
         end,
         Scalar(0, 0, 0),  //黑色
         thickness,  //线宽
         lineType);  //线形

}

void DrawPolygon(Mat img)
{
    int lineType = 8;

    Point rookPoint[1][20];
    rookPoint[0][0] = Point(WINDOWS_WTDTH/4,     7 * WINDOWS_WTDTH/8);
    rookPoint[0][1] = Point(3*WINDOWS_WTDTH/4,   7 * WINDOWS_WTDTH/8);
    rookPoint[0][2] = Point(3*WINDOWS_WTDTH/4,   13 * WINDOWS_WTDTH/16);
    rookPoint[0][3] = Point(11*WINDOWS_WTDTH/4,  13 * WINDOWS_WTDTH/16);
    rookPoint[0][4] = Point(19*WINDOWS_WTDTH/32, 3 * WINDOWS_WTDTH/8);
    rookPoint[0][5] = Point(3*WINDOWS_WTDTH/4,   3 * WINDOWS_WTDTH/8);
    rookPoint[0][6] = Point(3*WINDOWS_WTDTH/4,       WINDOWS_WTDTH/8);
    rookPoint[0][7] = Point(26*WINDOWS_WTDTH/40,     WINDOWS_WTDTH/8);
    rookPoint[0][8] = Point(26*WINDOWS_WTDTH/40,     WINDOWS_WTDTH/4);
    rookPoint[0][9] = Point(22*WINDOWS_WTDTH/40,     WINDOWS_WTDTH/4);
    rookPoint[0][10] = Point(22*WINDOWS_WTDTH/40,    WINDOWS_WTDTH/8);
    rookPoint[0][11] = Point(18*WINDOWS_WTDTH/40,    WINDOWS_WTDTH/8);
    rookPoint[0][12] = Point(18*WINDOWS_WTDTH/40,    WINDOWS_WTDTH/4);
    rookPoint[0][13] = Point(14*WINDOWS_WTDTH/40,    WINDOWS_WTDTH/4);
    rookPoint[0][14] = Point(14*WINDOWS_WTDTH/40,    WINDOWS_WTDTH/8);
    rookPoint[0][15] = Point(   WINDOWS_WTDTH/4,    WINDOWS_WTDTH/8);
    rookPoint[0][16] = Point(   WINDOWS_WTDTH/4,   3 * WINDOWS_WTDTH/8);
    rookPoint[0][17] = Point(13*WINDOWS_WTDTH/32,  3 * WINDOWS_WTDTH/8);
    rookPoint[0][18] = Point( 5*WINDOWS_WTDTH/16, 13 * WINDOWS_WTDTH/16);
    rookPoint[0][19] = Point(   WINDOWS_WTDTH/4,  13 * WINDOWS_WTDTH/16);

    const Point*ppt[1] = {rookPoint[0]};
    int npt[] ={20};

    fillPoly(
                img,
                ppt,  //多边形的定点
                npt,  //多边形的数目
                1,  //多边形的数量
                Scalar(255, 255, 255), //白色
                lineType
                );
}
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Mat img = imread("F:\\MyCode\\dcq.jpg", CV_LOAD_IMAGE_UNCHANGED);
    if (img.empty())
    {
        printf("图像加载失败!");
            //cout << "图像加载失败!" << endl;
            return -1;
    }
    imshow("原子", img);//在MyWindow的窗中中显示存储在img中的图片

     //--------画原子
//    DrawEllipse(img, 90);
//    DrawEllipse(img, 0);
//    DrawEllipse(img, 45);
//    DrawEllipse(img, -45);

//    DrawFilledCircle(img,  Point(WINDOWS_WTDTH/2, WINDOWS_WTDTH/2));


    //Mat rookImage = Mat::zeros(WINDOWS_WTDTH, WINDOWS_WTDTH, CV_8UC3);
   // DrawPolygon(rookImage);
    //imshow("rookImage", rookImage);//在MyWindow的窗中中显示存储在img中的图片
    waitKey(0);  //等待直到有键按下
    return a.exec();
}
相关文章
相关标签/搜索