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();
}
相關文章
相關標籤/搜索