【问题标题】:Projecting a 2D point into 3D space using camera calibration parameters in OpenCV使用 OpenCV 中的相机校准参数将 2D 点投影到 3D 空间
【发布时间】:2013-11-09 21:01:33
【问题描述】:
我使用 calibrateCamera() 获取我的相机参数,现在我有 cameraMatrix、distCoeffs、rotationMatrix、transformMatrix。
使用这些矩阵,我可以构建投影矩阵并将空间中的 3D 对象点转换为 2D 图像点。
像这样的东西:
但我想要的是这个投影的反面。我想将这些 2D 点转换回 3D 空间。我知道我会丢失一些信息,但我所有的原始点都在同一个计划中。
请帮助我通过使用相机参数来构建一个类似的矩阵。
【问题讨论】:
标签:
c++
opencv
computer-vision
linear-algebra
projection-matrix
【解决方案1】:
从一组投影的 2D 点中,您无法返回原始 3D 点,但可以返回连接 3D 点的光线及其在图像平面中的投影。所以,你失去了 3D 点的深度;也就是说,您知道方向,但不知道相机到 3D 点的距离。
您必须弥补 3D 点的深度。它们的平面条件允许您对它们的相对位置进行一些限制,但仅检索它们的原始深度是不够的。
例如,您可以设置 3 个非共线点的深度来创建 3D 空间中的平面。其他 2D 点的深度将由这些射线与这个新平面的交点给出。
如果您知道起源于 3D 点的平面的法线向量,您可以通过设置单个 2D 点的深度并相应地计算其他点来做类似的事情。此外,只有当您知道该平面到原点(到相机)的距离时,您才能检索 3D 点的真实深度。