C++ opencv三角形点生成NaN值

C++ opencv三角形点生成NaN值,c++,opencv,C++,Opencv,我试图从运动代码实现标准结构,但三角形点会产生NaN值。 我执行以下步骤- 获取图像1和图像2的ORB功能 匹配特征 使用FindSentialMat()从匹配的特征和可用的相机内在信息中获取基本矩阵 使用recoverPose()获取摄影机2的姿势。假设摄像机1位于原点 获取camera1和camera2的投影矩阵 使用triangulatePoints()获取三维点 我还使用camera1和camera2的投影矩阵以及上面获得的匹配点尝试了Matlab triangulate()函数。在Ma

我试图从运动代码实现标准结构,但三角形点会产生NaN值。 我执行以下步骤-

  • 获取图像1和图像2的ORB功能
  • 匹配特征
  • 使用FindSentialMat()从匹配的特征和可用的相机内在信息中获取基本矩阵
  • 使用recoverPose()获取摄影机2的姿势。假设摄像机1位于原点
  • 获取camera1和camera2的投影矩阵
  • 使用triangulatePoints()获取三维点
  • 我还使用camera1和camera2的投影矩阵以及上面获得的匹配点尝试了Matlab triangulate()函数。在Matlab的情况下,我得到了很好的结果。
    但是在C++中使用OpenCV(OpenCV 3.3),我得到了Na值。

    < P>我也面临OpenCultPoT从OpenCV中遇到的问题。 这是因为输入点阵列的类型错误:

    • 点的形状应为:2xN或尺寸为1xN或Nx1的双通道矩阵
    • 必须是浮动类型

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

    分割。您验证了步骤1、2、3、4和5的结果了吗?我的意思是,你在OpenCV的每个步骤中都得到了正确的数据吗?你能发布用于三角点的代码吗?是的,对于步骤1和2,我使用drawMatches()查看匹配点,它们看起来是一致的。对于步骤3、4、5,我将计算值输入到Matlab三角剖分函数,这也给了我一致的结果。我调用triangulatePoints()如下-vector src,dst;//图像1和图像2上的匹配点Mat point3D;三角点(cam1、cam2、src、dst、point3D);//cam1和cam2是3x4矩阵