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

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

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

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

最佳答案

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

为了正确解决此问题,您需要使用直线投影渲染图像,然后使用镜头畸变系数使图像失真,您应该能够从OpenCV固有摄像机参数中检索到该畸变系数。这将需要渲染到纹理,然后在正确的坐标处从该纹理采样。有关详细信息,请参见Distortion on Wikipedia

关于opencv - 为什么模型的opengl投影不能提供与opencv投影完全相同的结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56018455/

10-11 02:38
查看更多