圆形棋盘格制作程序

制作棋盘格保存为图片格式,并且个数间隔半径都可以调节,代码直接附上,另外源代码也会上传上来,另外附上一个可以直接下载网站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);

}

扫描二维码关注公众号,回复: 3619059 查看本文章

猜你喜欢

转载自blog.csdn.net/konglingshneg/article/details/82626432