0

我正在使用 OpenCV 开发增强现实标记检测程序,并且我正在为同一个标记获得两个不同的旋转和平移值

当相机稍微移动时,3D 模型会自动在这些状态之间切换,而无需我的控制。下面添加以上两种情况的截图。我希望 Image#1 是正确的。如何以及在哪里纠正这个问题?

我已经关注了如何在 Android 中将 OpenCV 旋转和平移矢量与 OpenGL ES 一起使用?为 OpenGL 创建投影矩阵。前任:

// code to convert rotation, translation vector
glLoadMatrixf(ConvertedProjMatrix);
glColor3f(0,1,1) ;
glutSolidTeapot(50.0f);

图片#1 在此处输入图像描述

图片 #2 在此处输入图像描述

额外的

如果有人建议我一种让茶壶坐在标记平面上的方法,我会很高兴。我知道我必须编辑旋转矩阵。但是最好的方法是什么?

4

2 回答 2

0

您是否尝试过交换姿势算法(迭代、EPNP、P3P)?或者可能使用之前计算的值——记住它只是给你它的“最佳猜测”。

于 2012-08-22T11:56:10.527 回答
0

要旋转茶壶,您可以使用 glRotatef()。如果您想将当前矩阵围绕 y 轴旋转 125°,您可以调用:

glRotate(125,0,1,0);

我无法确定您茶壶的当前方向,但我想您需要将它绕 x 轴旋转 90°。

我不知道您的第一个问题,OpenCV 似乎无法确定显示的哪个位置是“正确的”位置。这取决于 OpenCV 正在寻找什么样的功能(边缘、高对比度、独特点......)以及您如何实现它。

于 2011-11-19T19:24:51.807 回答