OpenCV 中的失真失败

问题描述

我正在制作相机校准工具包。我正在使用来自 opencv2/calib3d.hppcv::calibrateCamera(...) 函数,这适用于鱼眼相机拍摄的图像,至少未失真的图像看起来是正确的。然而,当我用手机相机的图像尝试这个时,它会产生有趣的结果,你可以在下面看到。

Result

这个功能不适合校准这种相机吗?我必须使用哪个功能来正确校准?

解决方法

您的图案需要平整。我看到这张纸卷曲了。不过,这只是一个小问题。

您必须确保握住相机静止不动。滚动快门和运动一起导致无法校准的失真。

为了进行良好的校准,您需要移动相机/图案,使图案到达视图的角落,那里的镜头畸变最严重。您需要覆盖整个视图。不是在一张照片中,而是在所有照片中。

如果您不覆盖角落,数值优化将在那里没有数据,并且可能会引入其自身的失真,如您所见。

那些“只是”实际问题。你还需要一个理论基础。将 API 连接在一起并不能让人理解。关于这件事的标准书是

Multiple View Geometry in Computer Vision by Hartley & Zisserman