我正在开发 Android 上的基本增强现实应用程序。到目前为止,我所做的是用 opencv 检测一个正方形,然后使用 cvFindExtrinsicCameraParams2() 我计算了一个旋转和平移向量。为此,我使用了 4 个对象点,它们只是 (0,0,0) 周围正方形的角和图像中正方形的 4 个角。
这给我一个很好的旋转和平移矩阵。我还使用 cvRodrigues2() 计算了旋转矩阵,因为使用它比旋转向量更容易。只要我使用这些在图像中绘制一些点,一切正常。然而,我的下一步是将这些向量和矩阵传递回 java,然后将它们与 OpenGL 一起使用,在 OpenGLView 中绘制一个正方形。正方形应该正好在 OpenGLView 后面显示的图像中的正方形周围。
我的问题是我找不到在 OpenGL 中使用旋转矩阵和平移向量的正确方法。我开始使用与 openCV 函数完全相同的对象点。然后我以我能想到的几乎所有可能的方式应用旋转矩阵和平移向量。遗憾的是,这些方法都没有产生接近我希望的结果。谁能告诉我如何正确使用它们?
到目前为止,我得到的“最接近”的结果是将整个矩阵随机乘以 -1。但大多数情况下,正方形仍然像镜子一样倒转或旋转 180 度。所以我想这只是一个幸运的打击,但不是正确的方法。