OpenCV 到 OpenGL 坐标系的变换

标签 opencv opengl-es opengl-es-2.0 linear-algebra augmented-reality

我有两个右手坐标系。

OpenCV
enter image description here

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

OpenGL

enter image description here

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

我试图用连接 R 的 4x4 矩阵来表示它和 T0001在底部。

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

1  0  0  0
0 -1  0  0
0  0  -1 0
0  0  0  1

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

最佳答案

OpenCV 的相机坐标向右 X, Y 向下,Z 向前 .当 OpenGL 的相机坐标向右移动 X 时, Y向上,Z向内 .
two coordinate systems

使用 solvePnP作为最常用的例子之一。
你得到一个 3x3 旋转矩阵 R和一个 1x3 平移向量 T ,并创建一个 4x4 的 View 矩阵 MRT .只需反转 M 的第 2 行和第 3 行,您将获得用于 OpenGL 渲染的 View 矩阵。
two view matrices

关于OpenCV 到 OpenGL 坐标系的变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44375149/

相关文章:

java - OpenGL ES 2.0 : From orthogonal to perspective (card flip effect)

iphone - OpenGL ES 2.0 和顶点缓冲区对象 (VBO)

python-3.x - 计算旋转矩形区域中的非零像素数

C++:灰度位图头和活绘+opencv图像处理

android - 我如何分析内存和 cpu 虎钳的设备,以确定重型图像处理的图像分辨率?

android - 如何使用 OpenGL ES 2 从相机获取灰度预览

c++ - Qt:从一个对象发出相同的信号,但参数不同;插槽根据接收到的参数进行区分

c - OpenGL ES 2.0 纹理显示为黑色

animation - 将动画 3D 模型转换为 Quake 2 的模型

java - 在 Android OpenGL ES 2.0 中对多个 Sprite 进行动画处理