1. 程式人生 > >圓形棋盤格製作程式

圓形棋盤格製作程式

製作棋盤格儲存為圖片格式,並且個數間隔半徑都可以調節,程式碼直接附上,另外原始碼也會上傳上來,另外附上一個可以直接下載網站https://nerian.com/support/resources/patterns/

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>


using namespace cv;
using namespace std;


#define CIRCLE_RADIUS 20 //畫圓半徑
#define CIRCLE_DISTANCE 100 //兩圓之間的距離,必須大於兩倍半徑
//兩個偶數
#define HEIGHT_SIZE  4//豎直方向圓的個數
#define WIDTH_SIZE   6//水平方向圓的個數
//視窗大小
#define WINDOW_HEIGHT 500
#define WINDOW_WIDTH 800
#define WINDOW_NAME1 "【繪製圖1】" //為視窗標題定義的巨集
#define WINDOW_NAME2 "【繪製圖2】" //為視窗標題定義的巨集


void drawCircle(cv::Mat img, cv::Point center) 
{
/*第一個引數是影象,第二個引數是圓心座標,第三個引數是半徑,第四個引數是線條顏色,第五個引數表示圓被填充,第六個引數表示線條型別*/
    cv::circle(img, center, CIRCLE_RADIUS, cv::Scalar(0, 0, 0), -1, 8);
}


int main(void)
{
    
    cv::Mat img(WINDOW_HEIGHT, WINDOW_WIDTH, CV_8UC3, Scalar(255, 255, 255));
    for (int i = 0; i < HEIGHT_SIZE; i = i++)
    {
        for (int j = 0; j < WIDTH_SIZE ; j = j++)
        {
            drawCircle(img, cv::Point((WINDOW_WIDTH - (WIDTH_SIZE - 1)*CIRCLE_DISTANCE) / 2 + j * CIRCLE_DISTANCE, (WINDOW_HEIGHT - (HEIGHT_SIZE - 1)*CIRCLE_DISTANCE - CIRCLE_DISTANCE / 2) / 2 + i * CIRCLE_DISTANCE));


        }
    }
    for (int i = 0; i < HEIGHT_SIZE; i = i++)
    {
        for (int j = 0; j < WIDTH_SIZE-1; j = j++)
        {
            drawCircle(img, cv::Point((WINDOW_WIDTH - (WIDTH_SIZE - 1)*CIRCLE_DISTANCE) / 2 + CIRCLE_DISTANCE / 2 + j * CIRCLE_DISTANCE, (WINDOW_HEIGHT - (HEIGHT_SIZE - 1)*CIRCLE_DISTANCE - CIRCLE_DISTANCE / 2) / 2 + CIRCLE_DISTANCE / 2+ i * CIRCLE_DISTANCE));


        }
    }

    //drawFilledCircle(atomImage, cv::Point(WINDOW_WIDTH / 2, WINDOW_WIDTH / 2));
    cv::imwrite("圓形標定板.bmp", img);
    cv::imshow(WINDOW_NAME1, img);
    cv::waitKey(0);
    return(0);

}