当前位置:首页 > 编程笔记 > 正文
已解决

OpenCV标定演示,及如何生成标定板图片

来自网友在路上 146846提问 提问时间:2023-11-02 03:20:20阅读次数: 46

最佳答案 问答题库468位专家为你答疑解惑

标定的程序在官方的源码里有,

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)就生成了,如下图,

然后打印出来就可以做标定板了。

本文结束。

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"OpenCV标定演示,及如何生成标定板图片":http://eshow365.cn/6-29842-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!