如何从 3d 目标文件中获取 3d 坐标。

How to get 3d coordinates from a 3d object file.

我正在使用 3 个 ArUco 标记卡在 3D 头部模型上,使用 C++ 中的 OpenCV 进行姿势估计。我的姿势估计算法是给我相对于相机的平移,但我现在想知道标记相对于模型坐标系的坐标。因此,我使用 3D 扫描仪扫描了头部模型,并随身携带了对象文件和纹理文件。我的问题是获取标记相对于头部模型的坐标的最简单或最佳方法是什么。我应该使用 OpenGL、blender 还是其他软件?寻找一些指示或建议。

听起来你有相对于相机作为坐标系的标记坐标,所以坐标在 "eye space" 或相机 space 中。这是当你有相机在原点的坐标时。

这篇文章有一个精彩的图表,解释了不同的 spaces 以及如何转换为不同的 spaces: http://antongerdelan.net/opengl/raycasting.html

如果您想要这些相同的坐标,但在模型 space 中,您需要可以让您进入 space 的矩阵。

在这种情况下,您将从 eye/camera space -> 模型 space 开始,因此您需要将这些坐标乘以逆视图矩阵,然后再乘以逆模型矩阵。那么您的坐标将在模型 space.

但是,当您使用物理相机而不是软件相机时,例如在 OpenGL 中,这要困难得多。 为此,您需要使用 OpenCV 来获取相机的内部和外部参数。 有关详细信息,请参阅本教程: https://docs.opencv.org/3.1.0/dc/dbb/tutorial_py_calibration.html