3

我使用 opencv 3.0.0 测试版。

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

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

我知道 :

  • 相机矩阵,
  • 失真系数,
  • 翻译向量,
  • 旋转向量和
  • 我的对象 3D 点和 3D 原点之间的距离。

我怎样才能做到这一点?

4

3 回答 3

2

如果您知道对象的 3D 几何形状和相应的 2D 图像点,那么您可以从 3D-2D 点对应关系中找到对象姿势。

你得知道:

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

然后solvepnp()将估计rvectvec模型坐标系中的点带到相机坐标系中。

于 2015-03-04T14:23:54.843 回答
2

“图像点”是图像中网格角的坐标。这些以像素比例给出。

“对象点”是“对象空间”中网格角的坐标,即它们相对于彼此的位置。

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

于 2017-02-27T16:38:58.570 回答
1

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

感谢米卡的评论。

于 2015-03-27T14:55:07.323 回答