(把之前做的笔记搬运到这里来)
一、 原理与公式推导
二、代码实现
1.棋盘格生成:
void chessboard()
{
int perBoardPixel = 30;
int nx = 10;
int ny = 7;
Size boardSize(nx, ny);
Size imgSize(nx * perBoardPixel, ny * perBoardPixel);
Mat image(imgSize, CV_8UC1, Scalar(0));
int flag;
int basisHeight = 0;
int basisWidth = 0;
for (int j = 0; j < boardSize.height; j++)
{
for (int i = 0; i < boardSize.width; i++)
{
flag = (i + j) % 2;
if (flag == 0)
{
for (int n = j * perBoardPixel; n < (j + 1) * perBoardPixel; n++)
for (int m = i * perBoardPixel; m < (i + 1) * perBoardPixel; m++)
image.at<uchar>(n + basisHeight, m + basisWidth) = 255;
}
}
}
imwrite("chessboard.jpg", image);
}
2.标定
void calibrate()
{
ifstream fin("calibdata.txt"); /* 标定所用图像文件的路径 */
ofstream fout("caliberation_result.txt"); /* 保存标定结果的文件 */
// 读取每一幅图像,从中提取出角点,然后对角点进行亚像素精确化
int image_count = 0; /* 图像数量 */
Size image_size; /* 图像的尺寸 */
Size boa