如何使用 OpenGL 在 Qt 界面上显示 IPLImage 流进行渲染?

Posted

技术标签:

【中文标题】如何使用 OpenGL 在 Qt 界面上显示 IPLImage 流进行渲染?【英文标题】:How can I display an IPLImage stream on Qt interface using OpenGL for rendering? 【发布时间】:2012-11-01 16:31:40 【问题描述】:

将 IplImage 集成并显示到 Qt GUI 中的最佳方法是什么?这可以使用OpenGL完成吗?如果是,怎么做?

【问题讨论】:

【参考方案1】:

好吧,我在这里回答我自己的问题。 一年以来,我一直在使用 OpenCV,并且很多时候我不得不编写打开视频文件并将其流式传输的代码。 最近,我一直在使用 Qt 来提供高级 gui,并且我想出了一个使用 OpenGL 在 Qt GUI 上显示 IplImages 的解决方案(我花了很多时间挣扎,但最终成功了)。尽管可以使用 Qt highgui 支持构建 OpenCV,但我热衷于学习一点 OpenGL 并在我的应用程序中使用它。 我认为这对于需要一个基本框架来为其应用程序运行视频的人会有所帮助。 这个基本框架可用于广泛的应用,如视频内容分析、人脸识别、模式识别等。从更广泛的意义上说,这基本上是一个没有音频支持的视频播放器。因此,如果您愿意,可以添加音频支持并使其成为视频播放器。它将播放几乎所有格式,因为 opencv 使用 ffmpeg 播放视频。我已经创建了一个 C++ 库,我非常广泛地使用它:

主要类有:

QVideo : The main widget, providing functionality to open a video/rtsp stream and play it  
QIplImage: The core display widget. It's a QGLWidget which renders an IplImage
BackgroundWorker: This is a thread which runs in the background to retrieve images
from the stream. It is mandatory to run the frame grabber in a background thread,
otherwise it interferes with the GUI thread. All the image processing can be done in 
this thread

提供了源代码,因此您可以根据需要对其进行修改。 安装库后,您可以在 qt 应用程序中使用它,如下所示:

//Create an object
QVideo* video=new QVideo("Name",);
//set geometry (optional)
setCentralWidget(video);

要构建库,您需要安装 qt 和 opencv(支持 ffmpeg)。 该库根据体系结构安装在 /usr/lib 或 /usr/lib64 中。 包含文件安装在 /usr/local/include 当然,如果需要,所有这些都可以在项目文件中进行更改。 要安装,只需解压缩包,然后运行 ​​qmake、make 和 sudo make install。 注意:该项目是为 unix 配置的,需要针对 windows 构建进行更改。给我留言以获取更多信息。

【讨论】:

以上是关于如何使用 OpenGL 在 Qt 界面上显示 IPLImage 流进行渲染?的主要内容,如果未能解决你的问题,请参考以下文章

QT和OpenGL如何正确集成并显示纹理

OpenGL 纹理映射内存泄漏

如何使用 opengl dekstop 选项配置 Qt?

在 Qt 中实现的 OpenGL 中级教程

Qt OpenGL点大小

如何在qt中执行opengl