3d对象覆盖 - 增强现实irrlicht + opencv

时间:2014-08-18 05:50:23

标签: c++ opencv matrix augmented-reality irrlicht

我正在尝试开发一种增强现实程序,它将一个3d对象叠加在一个标记之上。模型不会与标记一起(按比例)移动。以下是我做过的事情清单

1)使用opencv:a)我使用solvepnp方法查找rvecs和tvecs。 b)我还使用rodrigues方法找到旋转矩阵并附加tvecs向量以获得投影矩阵。 c)只是为了测试我制作了一些点和线并投射它们来制作一个立方体。这非常好,我的输出效果很好。

2)使用irrlicht:a)我尝试放置一个3D模型(位置(0,0,0)和旋转(0,0,0)),并在后台运行相机输入。 b)使用在opencv中使用rodrigues找到的旋转矩阵,我从这个帖子(“http://planning.cs.uiuc.edu/node103.html”)计算出俯仰,偏航和滚动值,并将值传递给旋转场。在位置字段中,我传递了tvecs值。 tvecs值为tvecs [0], - tvecs [1],tvecs [2]。

模型正在朝着正确的方向移动,但它没有按比例移动。意思是,如果我将标记在x方向上移动100个像素,则模型仅移动20个像素(不测量值100和20,我只是采用任意值来说明示例)。类似地,对于y轴和z轴。我知道我必须引入另一个转换矩阵,将opencv相机坐标映射到irrlicht相机坐标和4x4矩阵。但我不知道如何找到它。此外,opencv的投影矩阵[R | t]是一个3x4矩阵,它产生一个要投影的2d点。 opencv和irrlicht之间的4x4矩阵映射需要将3d点(均匀)馈送到4x4矩阵中。我如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

您正在撰写的4x4矩阵似乎是M=[ R|t; 0 1]t是3x1平移向量。要获得4x1([x y z 1] ^ T)点v'的变换坐标v,只需执行v'=Mt

您的缩放问题也可能是由于OpenCV中用于相机校准的单位与其他库使用的单位不同造成的。