1

我想计算两个相机的外部校准,并使用 cv::stereoCalibrate() 函数来执行此操作。然而,结果与现实并不相符。有什么问题?

设置:两台摄像机安装在 7 米高处,向下看时面对面。他们有很多视野交叉点,我捕获了我在校准中使用的棋盘图像。

我没有翻转任何图像。

我需要翻转图像吗?还是我需要做其他事情来告诉相机实际上是面对面的?

注意:相同的功能可以完美校准彼此相邻且朝向相同方向的摄像机(就像任何典型的立体摄像机一样)。

谢谢

4

1 回答 1

0

为了“告诉相机实际上是彼此面对的”,您必须正确指定imagePoints1imagePoints2正确地指定具有匹配索引的点对应于相同的物理点。

如果在您的情况下,当相机朝向相同的方向并且不适用于您的配置时,功能可以完美运行 - 点索引之间的差异可能是一个可能的原因(很可能点是垂直和水平翻转的)。

一种调试方法是在每个帧上的点附近绘制索引,或者对它们进行颜色编码并确保它们在图像之间匹配。

一个问题 - 你为什么使用cv::stereoCalibrate()? 您描述的设置似乎不是一个好的用例。如果你想估计相机的外在参数,你可以使用cv::calibrateCamera(). 唯一的缺点是它假设所有提供的视图的内在参数都是相同的(所有图像都是用相同或非常相似的相机拍摄的)。如果不是这种情况 - 确实cv::stereoCalibrate()会更合适(但手册建议您仍然使用单独估计每个相机的内在参数cv::calibrateCamera()

于 2017-02-01T13:25:08.083 回答