opencv - 使用opencv进行多摄像机校准:两个摄像机彼此相对

标签 opencv camera calibration extrinsic-parameters

我想计算两个彼此不相干的相机的外部校准,并且正在使用cv::stereoCalibrate()函数来执行此操作。但是,结果与实际情况不符。有什么问题吗?

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

我没有翻转任何图像。

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

注意:相同的功能可以完美地校准彼此面对相同方向的摄像机(如任何典型的立体摄像机)。

谢谢

最佳答案

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

如果在您的情况下,当摄像头朝向相同方向并且与您的配置不兼容时,功能完美地起作用-点索引之间的差异可能是一个可能的原因(最有可能的点在垂直和水平方向都发生了翻转)。

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

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

关于opencv - 使用opencv进行多摄像机校准:两个摄像机彼此相对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41968884/

相关文章:

python - OpenCV内存不足错误

c - 关于在视频中寻找学生

swift - 无法在 Swift Playgrounds 上捕获视频数据,未调用 captureOutput AVCaptureVideoDataOutputSampleBufferDelegate 委托(delegate)方法

c++ - CascadeClassifier.load() 仅在发布时出错

c++ - OpenCV 从 C++ 到 C 的转换

ios - 在 iOS OpenCV 相机中将相机预览旋转为人像

ios - "Tap to focus"到 "auto focus"当相机 View 中的内容发生变化时。像股票相机应用程序或 iOS 的 UIImagePickerController 中的逻辑?

opencv - OpenCV-CirclesGridFinder的文档

Android 加速度计精度(惯性导航)

image-processing - Kitti校准矩阵是如何计算的?