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



我正在尝试开发一个增强现实程序,将3d对象覆盖在标记的顶部。模型不随标记(成比例地)移动。这是我做过的事情的清单

1)使用opencv: a)我使用了solvepnp方法来查找rvec和tvec。b)我还使用rodrigues方法找到旋转矩阵,并附加tvecs向量得到投影矩阵。c)为了测试,我制作了一些点和线,并将它们投影成一个立方体。这工作得很好,我得到了一个很好的输出。

2)使用光照: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相机坐标映射到光照相机坐标,它是一个4x4矩阵。但我不知道如何找到它。此外,opencv的投影矩阵[R|t]是一个3x4矩阵,它产生一个要投影的2d点。opencv和irrlight之间的4x4矩阵映射需要一个3d点(同质)被馈送到4x4矩阵中。我该怎么做呢?

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

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

最新更新