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