【问题标题】:Why is the opengl projection of a model not giving the exact same results as the opencv projection?为什么模型的 opengl 投影没有给出与 opencv 投影完全相同的结果?
【发布时间】:2019-09-24 20:55:28
【问题描述】:

我正在做一个项目,我使用 cv::solvePnP 获取相机姿势并使用此姿势在 OpenGL 窗口中投影 3D 模型。

我使用this link 从 opencv 内部和外部矩阵转到 opengl mvp 矩阵。

当我放大对象时,投影似乎很好,如image 所示,使用opengl 稍微大一点:左边是用相机看到的对象,右边是opengl 投影给出的我。

我以为我会有完全相同的投影。是因为失真场还是我在opengl中使用了错误的投影矩阵?

【问题讨论】:

  • 没有办法处理投影矩阵中的失真吗?还是我必须处理着色器中的失真?
  • 将我的评论转换为答案。

标签: opencv opengl camera-calibration


【解决方案1】:

源图像具有桶形透镜畸变。这是无法用投影矩阵描述的图像的非线性失真。另一方面,OpenGL 使用直线投影:将直线投影到直线上。所以它不能解释源图像中的镜头畸变。

要正确解决此问题,您需要使用直线投影渲染图像,然后使用镜头畸变系数对其进行扭曲,您应该能够从 OpenCV 固有相机参数中检索到该系数。这需要渲染到纹理,然后在正确的坐标处从该纹理中采样。详情请见Distortion on Wikipedia

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2015-04-11
    • 2012-09-06
    相关资源
    最近更新 更多