我编写了两个代码,使用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;
}
由于
答案 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)
。动画和相机流现在都在工作。但是,它确实减慢了动画的速度。