如何将OpenCV与OpenGL集成(Visual C ++ 2008)

时间:2011-11-10 11:38:42

标签: visual-c++ opengl opencv glut

我编写了两个代码,使用OpenCv(用于标记检测)和OpenGL(用于创建简单的3D框)。但我不清楚如何整合这两者。例如:在OpenCV窗口中显示该框。

当我试图调用OpenCV和OpenGL的以下两个函数时,只有OpenGL函数似乎正在执行。 (仅创建OpenGL窗口,但现在是OpenCV窗口)

int main(int argc, char** argv){

    initGL(argc, argv); // basic initialization steps for OpenGL
    glutMainLoop(); // shows 3D scene in a new window
    startOCV(); // shows camera stream in a new window
    return 0;
}

由于

3 个答案:

答案 0 :(得分:2)

  

glutMainLoop进入GLUT事件处理循环。在GLUT程序中,该程序最多应调用一次。 一旦调用,此例程将永远不会返回

您的代码将在glutMainLoop上屏蔽,因此您需要在其前面调用startOCV

如果startOCV也阻止,则需要run this function in a thread,以便main()可以继续执行glutMainLoop

修改 ::

但正确的方法是the other way around将OpenCV的图像复制到OpenGL纹理并将其渲染到 OpenGL窗口

答案 1 :(得分:1)

您可以尝试最新的OpenCV主干。它们将OpenGL集成在highgui(OCV显示模块)中。它可能会让您的生活更轻松,并为您解决问题。

不要忘记任何主干版本都可能有缺陷并且有点无证。下一个官方发布尚未计划。

答案 2 :(得分:0)

我有类似的问题,这就是我解决它的方法。我有用于捕获使用OpenCV的摄像机流的代码,并使用openGL和glut- glutMainLoop()在无限循环和动画中运行。

我将openCV代码用于捕获更新函数中的摄像头流 - 并在main中调用glutTimerFunc(TIMER_MS, update, 0)。动画和相机流现在都在工作。但是,它确实减慢了动画的速度。