#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(); }