【问题标题】:Augmented Reality OpenGL+OpenCV增强现实 OpenGL+OpenCV
【发布时间】:2014-03-26 15:53:35
【问题描述】:

我对 OpenCV 非常陌生,对 OpenGL 的经验有限。我愿意在棋盘的校准图像上叠加一个 3D 对象。有什么提示或指导吗?

【问题讨论】:

  • “校准”是什么意思?你的意思是棋盘上每个正方形的每一边的长度都与一些有用的测量有关(即 1 边长 = 1 英尺/英寸/米/等)?
  • 我的意思是我正在执行相机校准,而棋盘是校准对象。现在我想要的是使用 openGL 在 calib 对象上渲染 2D 或 3D 对象。
  • 啊,好的。抱歉,我知道的不多,无法帮助您,请尝试 scap3y 的回答

标签: opengl opencv augmented-reality layer camera-calibration


【解决方案1】:

基本思想是您有 2 个摄像头:一个是物理摄像头(您使用 opencv 检索图像的那个),一个是 opengl 摄像头。您必须对齐这两个矩阵。

为此,您需要校准物理相机。

首先。您需要一个畸变参数(因为每个镜头或多或少都有一些光学畸变),并使用这些参数构建所谓的内在参数。为此,您可以在纸上打印一个棋盘,用它来获取一些图像并校准相机。它在互联网上充满了很好的教程,从你的回答看来你有它们。挺好的。

那么。您必须校准相机的位置。这是通过所谓的外部参数完成的。这些参数编码了这些相机的 3D 世界的位置和旋转。

OpenCV 方法cv::solvePnPcv::Rodrigues 需要内部参数,并使用rodrigues 方法获取外部参数。该方法获取输入2组对应点:一些3D已知点及其2D投影。这就是为什么所有增强现实应用程序都需要一些标记:通常标记是方形的,所以在检测到它之后,您就知道点 P1(0,0,0) P2(0,1,0) P3(1,1, 0) P4(1,0,0) 形成一个正方形,你可以找到上面的平面。

一旦你有了外部参数,所有的游戏都很容易解决:你只需要在 OpenGL 中使用 FoV 和相机的孔径角从内部参数进行透视投影,然后将相机放置在外部参数给定的位置参数。

当然,如果您想(并且您应该)正确理解和处理此过程的每个步骤.. 有很多数学 - 矩阵、角度、四元数、矩阵,还有.. 矩阵。你可以在著名的Multiple View Geometry in Computer Vision from R. Hartley and A. Zisserman.中找到参考

此外,要正确处理 opengl 部分,您必须处理所谓的“现代 OpenGL”(请记住,glLoadMatrix 已弃用)和用于加载相机位置矩阵的一点着色器(对我而言,这是是个问题,因为我对此一无所知)。

我之前已经处理过这个问题,并且我有一些代码,所以请随时询问您遇到的任何问题。这里有一些我感兴趣的链接:

  1. http://ksimek.github.io/2012/08/14/decompose/(很好的解释)
  2. Camera position in world coordinate from cv::solvePnP(我问过这个问题)
  3. http://www.morethantechnical.com/2010/11/10/20-lines-ar-in-opencv-wcode/(关于计算机视觉的精彩博客)
  4. http://spottrlabs.blogspot.it/2012/07/opencv-and-opengl-not-always-friends.html(好技巧) http://strawlab.org/2011/11/05/augmented-reality-with-OpenGL/
  5. http://www.songho.ca/opengl/gl_projectionmatrix.html(关于opengl相机设置基础的很好的解释)
  6. 其他一些随机有用的东西: http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html(文档,总是看文档!!!) Determine extrinsic camera with opencv to opengl with world space object Rodrigues into Eulerangles and vice versa Python Opencv SolvePnP yields wrong translation vector http://answers.opencv.org/question/23089/opencv-opengl-proper-camera-pose-using-solvepnp/

请先阅读它们。像往常一样,一旦你有了这个概念,这就是一个简单的笑话,需要让你的大脑稍微撞到墙上。只是不要被所有这些数学吓到:)

【讨论】:

  • 嘿,我尝试按照您的指示进行操作,但遇到了问题,您介意看看my post 吗?
猜你喜欢
  • 2011-01-12
  • 2012-08-30
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 2011-06-15
  • 2012-07-09
  • 1970-01-01
相关资源
最近更新 更多