为什么OpenGL对一个模型的投影与OpenCV的投影结果不完全相同?

4

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

我使用这个链接从opencv内部和外部矩阵转换为opengl的mvp矩阵。

投影似乎很好,只有当我放大对象时,它稍微比opengl中显示的略大,如图像所示:左边是相机看到的对象,右边是opengl投影给我的东西。

我以为我会得到完全相同的投影。是因为扭曲场还是我在opengl中使用了错误的投影矩阵?


投影矩阵中没有处理畸变的方法吗?还是必须在着色器中处理畸变? - user6138759
1个回答

4
源图像存在桶形透镜畸变。这是一种非线性的图像畸变,不能用投影矩阵来描述。另一方面,OpenGL使用矩形投影:将直线投影到直线上。因此,它无法解决源图像中的镜头畸变问题。 为了正确解决这个问题,您需要使用矩形投影来渲染图像,然后使用透镜畸变系数进行失真矫正,您应该能够从OpenCV内部摄像机参数中检索到这些系数。这将需要渲染到纹理,然后在正确的坐标处对其进行采样。有关详细信息,请参见Wikipedia上的畸变

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接