使用 opencv 3.0.0 beta 将图像点投影到对象点

Project image points to object points with opencv 3.0.0 beta

我用的是opencv 3.0.0 beta

我校准了我的相机,我想将图像点 (2D) 投影到 3D 中的点。

我看到函数 :void fisheye::projectPoints(InputArray objectPoints, OutputArray imagePoints, InputArray rvec, InputArray tvec, InputArray K, InputArray D, double alpha=0, OutputArray jacobian=noArray()) 但我想要相反的投影。

我知道:

我该怎么做?

如果你知道物体的 3D 几何结构和相应的 2D 图像点,那么你就可以从 3D-2D 点对应关系中找到物体姿态。

你需要知道:

  • objectPoints:3D对象坐标中的对象点数组space,
  • imagePoints – 对应二维图像点的数组,
  • 以及相机矩阵和畸变系数

然后solvepnp()将估计rvec连同tvec,将模型坐标系中的点带入相机坐标系。

为了解决我的问题,我实现了自己的重投影功能。这个函数是 fisheye::projectPoint 的反函数。它特定于我的问题,因为我的 3D 点和原点之间的距离是已知的。

感谢 Micka 的评论。

"Image points"是图像中网格角的坐标。这些以像素比例给出。

"Object points"是"object space"中网格角的坐标,也就是它们相对的位置。

因此,例如,您可以在图像坐标 (127, 265) 处设置左上角,而其对象坐标将为 (0, 0),因为左上角是跨两个轴的第一个.它右边的下一个角可以有坐标 (145, 263),它的对象坐标可以是 (1, 0)(即第一行第二列的角),等等