问:如何在摄像机视频流上渲染3D动画形状?

时间:2012-11-14 17:29:25

标签: python opengl qt4 video-streaming gstreamer

我有一项任务是创建一个增强现实应用程序,它具有类似于this one的GUI(覆盖路径和FollowMe概念)。该任务的有趣部分是应该在Qt框架的帮助下在桌面操作系统(Debian / Ubuntu)上完成应用程序。 Python是应用程序的首选语言。

因此,与上述移动应用程序的最大区别在于我的应用程序将使用插入PC的USB相机。

我尝试过几种不同的方法,似乎没有一种能满足要求:

  • this example不起作用;
  • this solution使用“两层”方法,但是当我尝试渲染上部窗口小部件时,它完全覆盖底部窗口小部件;
  • this solution有效,但它有两个缺点:OpenCV的主要用途不是视频流渲染(错误的工具,我猜GStreamer可能更合适)而且它只渲染简单的4点形状,不允许任何带孔的复杂多边形;

我还浏览了诺基亚的Qt camerality source code,但似乎这个问题在Symbian上以完全不同的方式解决,这在PC上是不适用的(嵌入式相机API与PC上的通用USB相机)

我倾向于认为问题可分为两个问题:

  • 在Qt PC应用程序中渲染摄像机视频流的最佳方法是什么?
  • 在Qt PC应用程序中将动画3D图像(可能是OpenGL生成)叠加到相机视频流上的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

如果你的目标是桌面,我会在整个过程中使用openGL 在背景中使用四边形,使用纹理流式传输视频(即将每个视频帧绘制到openGL纹理),然后在openGL上渲染所有3D模型。

通常所有的视频播放器框架(phonon,directshow等)都能很好地工作,只要你只想做最简单的“在盒子里显示视频”任务 - 只要你尝试将它们与其他任何东西混合起来就更难了而不仅仅是绘制图像。

(当然我可能错了,如果声音允许在带有几行代码的openGL四元组中显示视频,我会很喜欢它!)