Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
增强现实OpenGL+;OpenCV_Opengl_Opencv_Augmented Reality_Layer_Camera Calibration - Fatal编程技术网

增强现实OpenGL+;OpenCV

增强现实OpenGL+;OpenCV,opengl,opencv,augmented-reality,layer,camera-calibration,Opengl,Opencv,Augmented Reality,Layer,Camera Calibration,我对OpenCV非常陌生,对OpenGL的经验有限。我愿意在棋盘的校准图像上覆盖3D对象。有什么提示或指导吗?基本想法是您有两个摄像头:一个是物理摄像头(使用opencv检索图像的摄像头),另一个是opengl摄像头。你必须对齐这两个矩阵 为此,您需要校准物理相机 首先。您需要一个失真参数(因为每个镜头或多或少都有一些光学失真),并使用这些参数构建所谓的内在参数。你可以在纸上打印一个棋盘,用它来获取一些图像并校准相机。网上有很多关于这方面的很好的教程,从你的回答来看,你似乎有这些教程。那很好 那

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

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

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

首先。您需要一个失真参数(因为每个镜头或多或少都有一些光学失真),并使用这些参数构建所谓的内在参数。你可以在纸上打印一个棋盘,用它来获取一些图像并校准相机。网上有很多关于这方面的很好的教程,从你的回答来看,你似乎有这些教程。那很好

那么。你必须校准摄像机的位置。这就是所谓的外部参数。这些参数编码了这些摄影机的3D世界的位置和旋转

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

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

当然,如果你想(也应该)正确理解和处理这个过程的每个步骤。。有很多数学-矩阵,角度,四元数,矩阵,还有。。再一次。你可以在著名的

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

我已经处理过一些时候了,我有一些代码,所以请随意问任何类型的问题。这里有一些我感兴趣的链接:

  • (很好的解释)
  • (我问了一个问题)
  • (关于计算机视觉的精彩博客)
  • (好把戏)
  • (非常好地解释了opengl相机设置的基础知识)
  • 其他一些随机有用的东西: (文档,始终查看文档!!!)

  • 请先读一遍。像往常一样,一旦你有了这个概念,这是一个简单的笑话,你需要把你的大脑撞到墙上一点。不要被那些数学题吓到:)

    你说的“校准”是什么意思?你的意思是棋盘上每个正方形的每一侧的长度与一些有用的测量有关(即,1侧长度=1英尺/英寸/米/等)?我的意思是我正在执行相机校准,而棋盘是校准对象。现在我想要的是使用openGL在calib对象上渲染2D或3D对象。啊,好的。对不起,我知道的不多,帮不了你,试试scap3y的回答嘿,我试着按照你的指示做,但我遇到了一个问题,你介意看一下吗?