1
我试图使用OpenCV的solvePnPRansac()
来计算3D物体的已知2D投影。我的数值(固有摄像机参数,模型点(3D),图像点(2D))都是双值。正常的solvePnP()
并不抱怨。solvePnPRansac如何与double值一起使用?
但是,当我尝试使用solvePnPRansac,它产生的错误信息:
断言失败< opoints.depth()== CV_32F>
如何使用这个功能双重价值? (与浮动工作不会给出预期的结果)
这两个函数的文档都指定它们使用cv :: Point2f/3f。我不知道如何避免自己改变源代码。你真的需要那么多的精度数字吗?你使用Ransac的事实表明你的数据有一些噪音,这意味着双精度是过度的。 – Hammer 2012-07-24 21:56:38
好点。为什么我想让Ransac版本工作的主要动机是正常的solvePnP()给出了具有double值的视觉上很好的结果,但是没有float值(视觉上=当我使用报告的旋转和平移来计算背投影时),但不知何故旋转矩阵似乎是“错误的”,因为它与使用POSIT算法时的结果非常不同。 – Niko 2012-07-25 11:08:16
使用浮动体时,您测试了多少“错误”行为?当使用这样的算法时,我喜欢通过生成一组3d点来进行测试,应用已知的变换和投影来获得2d点,然后将这些点馈送到算法中,以查看它是否可以重新创建我的变换。这可以让你看到究竟有什么错误,并一次测试你的自由度1。这应该给你一个更好的想法是什么问题。我怀疑这个问题是使用单精度。 – Hammer 2012-07-25 16:53:20