在 C++ 中使用 OpenCV 相机校准的奇怪结果

问题描述

我正在使用 C++ 中的 OpenCV 制作相机校准工具包。我正在使用 opencv2/calib3d 中的“calibrateCamera”和“undistort”函数。我在两个图像集上得到了很好的结果,但在 5 个图像集上得到了糟糕的结果。所有图像集都很好,并且有足够的图片来校准相机。>

here some of these image sets

例如,当我使用该图像集尝试我的代码时,我可以正确找到并绘制棋盘的角,但其他东西是错误的。畸变系数不是真的,相机的光心是负的,所以不畸变很奇怪。

chessboard corners

result

你怎么看问题?

解决方法

我觉得你搞错了。 第一个图像序列和第二个图像序列之间存在一些差异。 第 1 个序列中的图像包含大范围的校准图案,但第 2 个序列中的图像不包含。 因此,相机畸变信息不足,openCV的标定功能无法正常工作。