我想计算两个相机的外部校准,并使用 cv::stereoCalibrate() 函数来执行此操作。然而,结果与现实并不相符。有什么问题?
设置:两台摄像机安装在 7 米高处,向下看时面对面。他们有很多视野交叉点,我捕获了我在校准中使用的棋盘图像。
我没有翻转任何图像。
我需要翻转图像吗?还是我需要做其他事情来告诉相机实际上是面对面的?
注意:相同的功能可以完美校准彼此相邻且朝向相同方向的摄像机(就像任何典型的立体摄像机一样)。
谢谢
我想计算两个相机的外部校准,并使用 cv::stereoCalibrate() 函数来执行此操作。然而,结果与现实并不相符。有什么问题?
设置:两台摄像机安装在 7 米高处,向下看时面对面。他们有很多视野交叉点,我捕获了我在校准中使用的棋盘图像。
我没有翻转任何图像。
我需要翻转图像吗?还是我需要做其他事情来告诉相机实际上是面对面的?
注意:相同的功能可以完美校准彼此相邻且朝向相同方向的摄像机(就像任何典型的立体摄像机一样)。
谢谢
为了“告诉相机实际上是彼此面对的”,您必须正确指定imagePoints1
并imagePoints2
正确地指定具有匹配索引的点对应于相同的物理点。
如果在您的情况下,当相机朝向相同的方向并且不适用于您的配置时,功能可以完美运行 - 点索引之间的差异可能是一个可能的原因(很可能点是垂直和水平翻转的)。
一种调试方法是在每个帧上的点附近绘制索引,或者对它们进行颜色编码并确保它们在图像之间匹配。
一个问题 - 你为什么使用cv::stereoCalibrate()
? 您描述的设置似乎不是一个好的用例。如果你想估计相机的外在参数,你可以使用cv::calibrateCamera()
. 唯一的缺点是它假设所有提供的视图的内在参数都是相同的(所有图像都是用相同或非常相似的相机拍摄的)。如果不是这种情况 - 确实cv::stereoCalibrate()
会更合适(但手册建议您仍然使用单独估计每个相机的内在参数cv::calibrateCamera()
)