相同的标记位置,不同的旋转和平移矩阵 - OpenCV

时间:2011-11-17 15:34:56

标签: opengl opencv projection-matrix rotational-matrices

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

当相机稍微移动时,3D模型会在无法控制的情况下自动在这些状态之间切换。以下添加了以上两种情况的屏幕截图。我希望Image#1是正确的。如何以及在何处更正?

我已关注How to use an OpenCV rotation and translation vector with OpenGL ES in Android?为OpenGL创建投影矩阵。 例如:

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

图片#1 enter image description here

图片#2 enter image description here

其他

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

2 个答案:

答案 0 :(得分:0)

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

glRotate(125,0,1,0);

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

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

答案 1 :(得分:0)

您是否尝试过交换姿势算法(ITERATIVE,EPNP,P3P)?或者可能使用之前计算中的值 - 请记住它只是给你'最佳猜测'。