opencv triangulatePoints导致NaN值

时间:2017-09-26 06:47:37

标签: c++ opencv

我正在尝试从Motion代码实现标准结构,但triangulatePoints导致NaN值。 我执行以下步骤 -

  1. 获取图像1和图像2的ORB功能。
  2. 匹配功能。
  3. 使用findEssentialMat()
  4. 从匹配的要素和相机内在信息中获取基本矩阵
  5. 使用recoverPose()获取相机2的姿势。假设相机1位于原点。
  6. 获取camera1和camera2的投影矩阵。
  7. 使用triangulatePoints()获取3D点数。
  8. 我已经尝试了Matlab triangulate()函数以及camera1和camera2的投影矩阵以及上面获得的匹配点。在Matlab的情况下,我得到了很好的结果。 但是在C ++中使用opencv(Opencv 3.3)我得到了NaN值。

1 个答案:

答案 0 :(得分:0)

我也遇到过来自opencv的triangulatePoints问题。 这是由于输入点数组的类型错误:

  • 点数必须为: 2xN 或双通道矩阵,大小为1xN或Nx1
  • 必须是 float!
  • 类型

除此之外,我能想到的另一件事可能是计算的3d点可能是无穷大,因此在转换为欧几里德坐标后,它们被除以零 - >为NaN