Objective c OpenCV solvePnP到OpenGL:大型转换向量
我正在使用OpenCV和OpenGL构建一个MacOSX AR应用程序。它是基于标记的AR,我正在使用一个叫做AR的库。这个库只是使用OpenCV函数将视觉输出直接写入图像缓冲区。但是我想使用OpenGL进行视觉输出,所以我创建了一个OpenGL视图,我正在使用我使用OpenCV cam校准程序为GL_投影矩阵获得的内在参数进行初始化,如下所示:Objective c OpenCV solvePnP到OpenGL:大型转换向量,objective-c,opengl,opencv,Objective C,Opengl,Opencv,我正在使用OpenCV和OpenGL构建一个MacOSX AR应用程序。它是基于标记的AR,我正在使用一个叫做AR的库。这个库只是使用OpenCV函数将视觉输出直接写入图像缓冲区。但是我想使用OpenGL进行视觉输出,所以我创建了一个OpenGL视图,我正在使用我使用OpenCV cam校准程序为GL_投影矩阵获得的内在参数进行初始化,如下所示: cv::Mat intrMat = tracker.camMatrix; // intrinsic 3x3 matrix // contains: /
cv::Mat intrMat = tracker.camMatrix; // intrinsic 3x3 matrix
// contains:
// 641.68 0.00 319.50
// 0.00 641.68 212.50
// 0.00 0.00 1.00
const float fx = intrMat.at<double>(0,0);
const float fy = intrMat.at<double>(1,1);
const float fovy = 2 * atan(0.5f * screenH / fy) * RAD2DEG;
const float aspect = (screenW*fy) / (screenH*fx);
// GL Perspective values: fx=641.68 / fy=641.68 / fovy=41.01 / aspect=1.33
gluPerspective(fovy, aspect, 0.1, 100.0);
这是将这两个向量转换为我找到的GL_MODELVIEW矩阵的方法。我相信这是正确的,但问题是我得到的平移向量中的分量在+/-500和+/-1500之间太大,无法显示。以下是矩阵的输出示例:
0.96 0.05 -0.26 0.00
0.01 0.97 0.23 0.00
0.27 -0.22 0.94 0.00
-72.55 8.47 -479.63 1.00
为什么会这样?solvePnP在转换向量中使用什么类型的单位?如何将它们转换为可用值以显示在OpenGL视图中
0.96 0.05 -0.26 0.00
0.01 0.97 0.23 0.00
0.27 -0.22 0.94 0.00
-72.55 8.47 -479.63 1.00