我正在使用增强现实标记检测程序,使用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
图片#2
其他
如果有人建议我在标记平面上让茶壶坐着,我会很高兴的。我知道我必须编辑旋转矩阵。但这样做的最佳方法是什么?
答案 0 :(得分:0)
要旋转茶壶,您可以使用glRotatef()。如果要围绕y轴旋转当前矩阵,例如旋转125°,可以调用:
glRotate(125,0,1,0);
我无法确定茶壶的当前方向,但我想你需要围绕x轴旋转90°。
我不知道你的第一个问题,OpenCV似乎无法决定哪个显示的位置是“正确的”。这取决于OpenCV正在寻找的功能(边缘,高对比度,独特点......)以及如何实现它。
答案 1 :(得分:0)
您是否尝试过交换姿势算法(ITERATIVE,EPNP,P3P)?或者可能使用之前计算中的值 - 请记住它只是给你'最佳猜测'。