使用opencv进行多相机校准:两台相机彼此相对

时间:2017-01-31 22:46:02

标签: opencv camera calibration extrinsic-parameters

我想计算两个相机的外在校准,并且使用cv :: stereoCalibrate()函数来执行此操作。但是,结果与现实不符。可能有什么不对?

设置:两个摄像头安装在7米高,朝下看时彼此相对。他们有很多视野交叉点,我捕获了我在校准中使用的棋盘图像。

我没有翻转任何图片。

我需要翻转图像吗?或者我是否需要做其他事情才能说明相机实际上是面对面的?

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

由于

1 个答案:

答案 0 :(得分:0)

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

如果在你的情况下功能完美,当摄像机朝向相同的方向并且不适合你的配置时 - 点索引之间的差异可能是一个可能的原因(最有可能的点是垂直和水平翻转)。 / p>

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

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