C++在A4纸上制作棋盘格代码
时间: 2023-12-19 14:07:40 浏览: 30
#include <stdio.h>
int main() {
int row, col;
// 打印棋盘格
for (row = 1; row <= 8; row++) {
for (col = 1; col <= 8; col++) {
if ((row + col) % 2 == 0) {
printf("██");
} else {
printf(" ");
}
}
printf("\n");
}
return 0;
}
相关问题
C++固定分辨率制作棋盘格代码
以下是使用C语言实现固定分辨率制作棋盘格的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define BOARD_SIZE 8
#define PIXEL_SIZE 50
int main() {
// 计算棋盘格的像素大小
int board_pixel_size = BOARD_SIZE * PIXEL_SIZE;
// 分配内存用于存储棋盘格
unsigned char* board = (unsigned char*)malloc(board_pixel_size * board_pixel_size);
// 填充棋盘格
for (int y = 0; y < board_pixel_size; y++) {
for (int x = 0; x < board_pixel_size; x++) {
int cell_x = x / PIXEL_SIZE;
int cell_y = y / PIXEL_SIZE;
if ((cell_x + cell_y) % 2 == 0) {
board[y * board_pixel_size + x] = 255;
} else {
board[y * board_pixel_size + x] = 0;
}
}
}
// 保存棋盘格为BMP格式文件
FILE* fp = fopen("chessboard.bmp", "wb");
unsigned char bmp_header[54] = {
0x42, 0x4D, 0x36, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00,
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0x0E, 0x00, 0x00,
0xC4, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0xFF, 0x00
};
int file_size = board_pixel_size * board_pixel_size + 54;
bmp_header[2] = (unsigned char)(file_size);
bmp_header[3] = (unsigned char)(file_size >> 8);
bmp_header[4] = (unsigned char)(file_size >> 16);
bmp_header[5] = (unsigned char)(file_size >> 24);
fwrite(bmp_header, sizeof(unsigned char), 54, fp);
for (int y = 0; y < board_pixel_size; y++) {
for (int x = 0; x < board_pixel_size; x++) {
unsigned char color = board[y * board_pixel_size + x];
fwrite(&color, sizeof(unsigned char), 1, fp);
}
}
fclose(fp);
// 释放内存
free(board);
return 0;
}
```
该代码会生成一个大小为8x8的棋盘格,每个格子大小为50x50像素,生成的棋盘格会保存为BMP格式文件,并命名为chessboard.bmp。可以根据需要调整BOARD_SIZE和PIXEL_SIZE来生成不同大小的棋盘格。
opencv读取图片c++,完成棋盘格标定完整代码
下面是一个完整的 OpenCV C++ 棋盘格标定的示例代码,包括读取图片、检测棋盘格角点、计算相机内参和畸变参数等步骤:
```
#include <opencv2/opencv.hpp>
int main()
{
// 棋盘格大小
cv::Size boardSize(9, 6);
// 棋盘格角点坐标
std::vector<cv::Point3f> objPoints;
for (int i = 0; i < boardSize.height; i++) {
for (int j = 0; j < boardSize.width; j++) {
objPoints.push_back(cv::Point3f(j, i, 0));
}
}
// 图像文件列表
std::vector<std::string> fileList = {"image1.jpg", "image2.jpg", "image3.jpg"};
// 图像角点坐标
std::vector<std::vector<cv::Point2f>> imgPoints;
// 读取每张图像,检测角点
for (const auto& fileName : fileList) {
// 读取图像
cv::Mat img = cv::imread(fileName);
// 转换为灰度图像
cv::Mat grayImg;
cv::cvtColor(img, grayImg, cv::COLOR_BGR2GRAY);
// 检测棋盘格角点
std::vector<cv::Point2f> corners;
bool found = cv::findChessboardCorners(grayImg, boardSize, corners);
if (found) {
// 亚像素精细化角点坐标
cv::cornerSubPix(grayImg, corners, cv::Size(11, 11), cv::Size(-1, -1),
cv::TermCriteria(cv::TermCriteria::EPS + cv::TermCriteria::MAX_ITER, 30, 0.1));
// 显示检测到的角点
cv::drawChessboardCorners(img, boardSize, corners, found);
cv::imshow("Chessboard Corners", img);
cv::waitKey(0);
// 将角点坐标加入列表
imgPoints.push_back(corners);
}
else {
std::cout << "Cannot find chessboard corners in image " << fileName << std::endl;
}
}
// 计算相机内参和畸变参数
cv::Mat cameraMatrix, distCoeffs;
std::vector<cv::Mat> rvecs, tvecs;
double rms = cv::calibrateCamera(objPoints, imgPoints, cv::Size(grayImg.size()), cameraMatrix, distCoeffs, rvecs, tvecs);
// 输出相机内参和畸变参数
std::cout << "Camera matrix: " << cameraMatrix << std::endl;
std::cout << "Distortion coefficients: " << distCoeffs << std::endl;
return 0;
}
```
运行此程序,会依次读取 `image1.jpg`, `image2.jpg`, `image3.jpg` 三张图片,检测棋盘格角点,并计算相机内参和畸变参数。在检测到角点时,会在图像中显示角点,并等待用户按下任意键继续。在计算完成后,会输出相机内参和畸变参数的值。