【发布时间】:2017-06-05 18:13:58
【问题描述】:
我有两个右手坐标系。
正如您在黑色箭头中看到的那样,相机向下看正 $Z$ 轴。您可以忽略图表的其余部分。
OpenGL
虽然在此处不可见,但 OpenGL 中的相机向下看-Z 轴。我想将 OpenCV 坐标系中相机前方的 3D 点转换为 OpenGL 中相机前方的 3D 点。
我试图在一个 4x4 矩阵中表示它,该矩阵将 R 和 T 与底部的 0001 连接起来。
到目前为止,我已经尝试过了
1 0 0 0
0 -1 0 0
0 0 -1 0
0 0 0 1
但它似乎什么也没做,OpenGL坐标系中什么也没有显示。
【问题讨论】:
-
根据你的图表,你的答案是正确的,它应该改变 3D 点的 Y 和 Z 分量的符号...你能详细说明什么都不做的部分吗?
-
该点似乎仍然在 OpenGL 相机后面渲染,而不是 Z 组件被翻转
-
输入点的来源是什么?会不会不在 OpenCV 坐标系中?要检查您的转换是否至少在做预期的事情,请尝试将其应用于单位向量(例如
[0,1,0])以查看它们是否被旋转。另一种仔细检查的方法是使用 OpenCV viz 调试/可视化转换前后的点 -
@api55 提供的屏幕截图取自 OpenCV 的网站。我正在使用solvePnP从一些描述3D对象的“对象点”和它出现在屏幕上的“图像点”计算旋转和平移向量。绘制单位向量似乎是个好主意
-
请记住,除了轴转换之外,opencv 和 opengl 中的矩阵是不同的:第一个是行主要顺序,第二个是列主要顺序。如果您正在处理转换矩阵,这可能是问题的根源
标签: opencv opengl-es opengl-es-2.0 linear-algebra augmented-reality