OpenCV 到 OpenGL 坐标系的变换

Car*_*izz 5 opencv opengl-es linear-algebra augmented-reality opengl-es-2.0

我有两个右手坐标系。

OpenCV 在此处输入图片说明

正如您在黑色箭头中看到的那样,相机向下看正 $Z$ 轴。您可以忽略图表的其余部分。

OpenGL

在此处输入图片说明

虽然在此处不可见,但 OpenGL 中的相机向下看-Z轴。我想将 OpenCV 坐标系中相机前方的 3D 点转换为 OpenGL 中相机前方的 3D 点。

我试图用一个 4x4 矩阵来表示它,该矩阵在底部连接RT使用0001

到目前为止,我已经尝试过这个

1  0  0  0
0 -1  0  0
0  0  -1 0
0  0  0  1
Run Code Online (Sandbox Code Playgroud)

但它似乎没有做任何事情,在 OpenGL 坐标系中什么也没有显示。

Sum*_*Sun 12

OpenCV的相机坐标X向右,Y向下,Z向前。而OpenGL的相机坐标X向右,Y向上,Z向内两个坐标系

作为solvePnP最常用的示例之一。您将获得一个 3x3 旋转矩阵R和一个 1x3 平移向量T,并M使用R和创建一个 4x4 视图矩阵T。只需将 M 的第 2 行和第 3 行反转,您将获得用于 OpenGL 渲染的视图矩阵。 两个视图矩阵

  • 这是一个很好的答案,对我有帮助,但它缺少这样一个事实:与 OpenCV 相比,OpenGL 使用不同的矩阵表示法。由于 OpenGL 使用列优先系统,因此它将读取第一列,就好像它是第一行一样。因此,我们需要在使用“OpenGL视图矩阵”之前对其进行转置。 (3认同)