标定的程序在官方的源码里有,
opencv-4.5.5\samples\cpp\tutorial_code\calib3d\camera_calibration
很多小白不知道怎么跑起来,这个也怪OpenCV官方,工作没做完善,其实的default.xml是要自己手动改的,输入的图片也要自己去拍摄,还有那个VID5.xml也要改成可以直接找到图片的路径;
我这里拍了5张图,故意做了鱼眼效果后,用于标定校正。程序已经改好了,直接visual studio就可以跑了,到这里去下载吧,
https://github.com/SpaceView/OpenCV455_cameraCalibrationDemo
关于标定板:
OpenCV官方曾经提供的标定板是9x6和7x7的,实际应用根据场景的需要,可能需要不同的标定板。
这里我们手动生成标定板chessboard格子的图片, 生成标定板的程序如下,
void Generate7x7Image() {const int BLOCKWIDTH = 100;const int BLOCKNUM = 7;cv::Size sz = { BLOCKNUM* BLOCKWIDTH, BLOCKNUM* BLOCKWIDTH };cv::Mat mat(sz, CV_8UC3);for (int r = 0; r < BLOCKNUM; r++) {for (int c = 0; c < BLOCKNUM; c++) {int IX = c * BLOCKWIDTH, IY = r * BLOCKWIDTH;int EX = IX + BLOCKWIDTH, EY = IY + BLOCKWIDTH;cv::Vec3b value;if (0 == (c + r) % 2) {value = { 0xFF,0xFF, 0xFF };}else {value = 0x000000;}for (int y = IY; y < EY; y++) {cv::Vec3b* p = mat.ptr<cv::Vec3b>(y);for (int x = IX; x < EX; x++) {p[x] = value;}}}}cv::imwrite("Generated7x7.png", mat);
}
这样,一张7x7(算格交叉点的话是6x6)就生成了,如下图,
然后打印出来就可以做标定板了。
本文结束。