如何在 OpenCV 中计算点的 3D 坐标

Posted

技术标签:

【中文标题】如何在 OpenCV 中计算点的 3D 坐标【英文标题】:How to calculate 3D coordinates of a point in OpenCV 【发布时间】:2011-04-06 07:03:56 【问题描述】:

我有一个校准的立体相机系统和两个相机视图中同一物体的像素位置。是否有任何简单的方法可以使用 OpenCv(和内部/外部参数)计算对象的 3D 世界坐标,或者我是否必须处理为相机和它们之间的转换生成的 3D 线? CvReprojectImageTo3D 可以提供帮助吗? 非常感谢

【问题讨论】:

【参考方案1】:

您可以对这些点进行三角测量。对于每个摄像头,您知道 x = IP * EP * X,其中 x = 2D 同质屏幕坐标,IP = 内在摄像头矩阵,EP = 外在摄像头矩阵和 X 3D 同质世界坐标。这个公式将为每个相机产生 2 个线性方程,导致线性问题 A*X = B。对于每个相机,附加到 A:

Ps = IP * EP
A(row 1) = x.x * Ps(row 3) - Ps(row 1)
A(row 2) = x.y * Ps(row 3) - Ps(row 2)
B(row 1 & 2) = 0

有 4 个未知数。为避免将 0 作为解决方案,请将 [0 0 0 1] 附加到 A 并将 [ 1 ] 附加到 B。

可以使用Jacobi method 或类似的东西来解决问题。

我没有找到/知道 OpenCV 中的方法,但是如果您知道什么是校准矩阵,那么实现上述方法应该是可行的。

【讨论】:

以上是关于如何在 OpenCV 中计算点的 3D 坐标的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 OpenCV 绘制 3D 坐标轴以进行人脸姿态估计?

OpenCV(C ++) - 根据已知的3D对象和摄像机位置计算图像的2D坐标

OpenCV中的姿势估计及3D效果(3D坐标轴,3D立方体)绘制

利用机器学习(mediapipe)进行人脸468点的3D坐标检测--视频实时检测

利用机器学习进行人脸468点的3D坐标检测,并生成3D模型

如何在缩放和旋转后计算点的坐标?