OpenCV Camera校准矩阵与OpenGL投影矩阵的相关性

时间:2018-05-09 00:36:03

标签: opencv opengl rendering camera-calibration projection-matrix

我很难在真实物体的图片中呈现具有相同尺寸和比例的.stl模型。 我把真实物体放在视野区域的中心,我想在模型和真实物体之间翻转(真实物体比模型中的物体小9倍)。

首先,我在tutorial中使用OpenGL校准相机,此时焦点对于真实物体是最佳的。 在我得到cx,cy,fx和fy值之后,我创建了一个包含这些值的透视矩阵,并使用了glMultMatrixd函数。 最后,我将照片调整为与我的OpenGL窗口相同,并将照片与渲染模型进行比较。

但我对结果有一些问题:

  1. 存在比例失真(宽于高)
  2. 存在透视变形(相机垂直于物体,所以我应该仅查看物体的顶部,但它显示物体的侧面)
  3. 尺寸与真实物体不相容(略小)
  4. 我的关系矩阵如下:

    var_dump

1 个答案:

答案 0 :(得分:0)

OpenGL期望列主要内存顺序的矩阵。您在上面显示的数据结构是行主要内存顺序(正常的写入顺序,OpenCV也用作内存顺序),因此您需要在传递给OpenGL之前对其进行转置。

您还构建了一个对称的视锥体(右==左== cx和顶部==底部== cy),它假设光轴(cx,cy)位于相机的中心&# 39; s成像器。真正的相机永远不会那么完美,这就是我们必须校准它们的原因。你需要一个不对称的平截头体,使用left == cx,right ==(width-cx)等; this guide应该有所帮助。

请注意,在OpenGL中,+ Y为向上,+ Z在相机后面(在OpenCV + Y中向下,+ Z在相机前面),因此请检查矩阵上的符号。