我写了两个代码,使用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;
}
谢谢
glutMainLoop进入GLUT事件处理循环。这个例程在GLUT程序中最多只能调用一次。一旦被调用,这个例程将永远不会返回。
你的代码将阻塞在glutMainLoop
上,所以你需要在它之前调用startOCV
。
如果startOCV
阻塞,您需要在线程中运行此函数,以便main()
可以继续执行glutMainLoop
。
编辑::
但是正确的方法是另一种方式:将OpenCV的图像复制到OpenGL纹理并渲染到OpenGL窗口。
您可以尝试最新的OpenCV主干。他们在highgui (OCV显示模块)中集成了OpenGL。它可能会使你的生活更轻松,并为你解决问题。
不要忘记任何主干版本都可能有bug和文档。下一个正式版本还没有计划。
我有类似的问题,这就是我如何解决它。我有代码捕获相机流,使用OpenCV和无限while循环和动画,使用openGL和glut- glutMainLoop()
。
我把openCV代码捕捉相机流在更新函数和称为glutTimerFunc(TIMER_MS, update, 0)
在主。动画和镜头流现在都在工作。但是,它确实减慢了动画的速度。