OpenCV摄像机标定矩阵与OpenGL投影矩阵的相关性
我很难用真实对象图片中显示的相同尺寸和比例来渲染.stl模型。 我把真实对象放在视图区域的中心,我想在模型和真实对象之间翻转(真实对象比模型中的小9倍) 首先,我使用OpenGL校准相机,就像在中一样,当焦距最适合真实对象时。 在获得cx、cy、fx和fy值后,我用这些值创建一个透视矩阵,并使用glMultMatrixd函数。 最后,我将照片调整为与OpenGL窗口相同的大小,并将照片与渲染模型进行比较 但我对结果有一些问题:OpenCV摄像机标定矩阵与OpenGL投影矩阵的相关性,opencv,opengl,rendering,camera-calibration,projection-matrix,Opencv,Opengl,Rendering,Camera Calibration,Projection Matrix,我很难用真实对象图片中显示的相同尺寸和比例来渲染.stl模型。 我把真实对象放在视图区域的中心,我想在模型和真实对象之间翻转(真实对象比模型中的小9倍) 首先,我使用OpenGL校准相机,就像在中一样,当焦距最适合真实对象时。 在获得cx、cy、fx和fy值后,我用这些值创建一个透视矩阵,并使用glMultMatrixd函数。 最后,我将照片调整为与OpenGL窗口相同的大小,并将照片与渲染模型进行比较 但我对结果有一些问题: 存在比例失真(宽于高) 存在透视失真(相机与对象垂直,因此我应该只查
GLdouble perspMatrix[16] = { fx / cx, 0 , 0 , 0,
0, fy / cy , 0 , 0,
0, 0 , -(znear + zfar) / (znear - zfar), 2 * zfar*znear / (zfar - znear),
0, 0 , -1 , 0 };
OpenGL希望矩阵按列主内存顺序排列。上面显示的数据结构是按行主内存顺序(正常的写入顺序,OpenCV也将其用作内存顺序)排列的,因此在传递到OpenGL之前需要对其进行转置 您还构建了一个对称的视锥体(right==left==cx和top==bottom==cy),它假设光轴(cx,cy)位于相机成像器的中心。真正的相机从来没有这么完美,这就是为什么我们必须校准它们。您需要一个不对称的平截头体,使用left==cx、right==(width-cx)等;应该有帮助 请注意,在OpenGL中,+Y向上,+Z在相机后面(在OpenCV中,+Y向下,+Z在相机前面),因此请检查矩阵上的符号