Opencv 参数";“三角形点”;关于它背后的姿势和数学

Opencv 参数";“三角形点”;关于它背后的姿势和数学,opencv,3d,linear-algebra,pose-estimation,Opencv,3d,Linear Algebra,Pose Estimation,recoverPose有参数“triangulatedPoints”,如中所示,尽管其背后的数学没有记录,甚至在源代码中也没有记录。 当我使用它时,我得到以下形式的矩阵: [0.06596200907402348, 0.1074107606919504, 0.08120752154556411, 0.07162400555712592, 0.1112415181779849, 0.06479560707001968, 0.06812069103377787, 0.072747718662

recoverPose有参数“triangulatedPoints”,如中所示,尽管其背后的数学没有记录,甚至在源代码中也没有记录。 当我使用它时,我得到以下形式的矩阵:

[0.06596200907402348, 0.1074107606919504, 0.08120752154556411, 
 0.07162400555712592, 0.1112415181779849, 0.06479560707001968, 
 0.06812069103377787, 0.07274771866295617, 0.1036230973846902, 
 0.07643884790206311, 0.09753859499789987, 0.1050111597547035, 
 0.08431322508162108, 0.08653721971228882, 0.06607013741719928, 
 0.1088621999959361, 0.1079215237863785, 0.07874160849424018, 
 0.07888037486261903, 0.07311940086190356;

 -0.3474319603010109, -0.3492386196164926, -0.3592673043398864,
 -0.3301695131649525, -0.3398606744869519, -0.3240186574427479, 
 -0.3302508442361889, -0.3534091474425142, -0.3134288005980755, 
 -0.3456284001726975, -0.3372514921152191, -0.3229005408417835, 
 -0.3156005118578394, -0.3545418178651592, -0.3427899760859008,  
 -0.3552801904337188, -0.3368860879000375, -0.3268499974874541,
 -0.3221050630233929, -0.3395139819250934;

 -0.9334091581425227, -0.9288726274060354, -0.9277125424980246,
 -0.9392374374147775, -0.9318967835907961, -0.941870018271934,
 -0.9394698966781299, -0.9306592884695234, -0.9419749503870455,
 -0.9332801148509925, -0.9343740431697417, -0.9386198310107222,
 -0.9431781968459053, -0.9290466865633286, -0.9351167772249444,
 -0.9264105322194914, -0.933362882155191, -0.9398254944757025,
 -0.9414486961893244, -0.935785675955617;

 -0.0607238817598344, -0.0607532477465341, -0.06067768097603395,
 -0.06075467523485482, -0.06073245675798231, -0.06078081616640227,
 -0.06074754785132623, -0.0606879948481664, -0.06089198212719162,
 -0.06071522666667255, -0.06076842109618678, -0.06083346023742937,
 -0.06084805655000008, -0.0606931888685702, -0.06071558440082779,
 -0.06073329803512636, -0.06078189449161094, -0.06080195858434526,
 -0.06083228813425822, -0.06073695721101467]
e、 g.4x20矩阵(本例中有20个点)。我想将此数据转换为std::vector,以便在solvePnP中使用它。怎么做,这里的数学是什么?谢谢

OpenCV提供了一个具有相同输出的函数:

points4D 4xN齐次坐标中重建点的数组

这表示每列都是齐次坐标系中的一个三维点。然而,你的观点看起来并不像我预期的那样。例如,你的第一点是:

[0.06596200907402348, -0.3474319603010109, -0.9334091581425227, -0.0607238817598344]
但我希望最后一个组件已经是1.0了。你应该仔细检查一下这里是否出了问题。通过将每个标注除以最后一个构件,始终可以删除点的“缩放比例”:

 [ x, y z, w ] = w [x/w, y/w, z/w, 1]
然后将前三部分用于PnP解决方案


我希望这有帮助

问题是我只有一个相机,没有立体对,这个功能(三角形点)可以与一个相机一起使用吗?@stackoverflower如果使用同一个相机,从稍微不同的视角拍摄两张图像,并且视野重叠,则没有区别。。。这几乎是从两个不同的相机拍摄一张照片。。。但是,不要期望它能处理超过2张图像。。。这就像有3个或更多的摄像头,而不是2个。。。