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