用于视频处理的图像缓冲区 [关闭]

Posted

技术标签:

【中文标题】用于视频处理的图像缓冲区 [关闭]【英文标题】:image buffer for video processing [closed] 【发布时间】:2017-06-14 11:59:01 【问题描述】:

我想用 Qt 和 opencv 开发一个应用程序,以处理来自相机的所有帧。 我有 2 个 Qthread,一个用于捕获图像,另一个用于处理。 处理线程有点慢,所以为了处理所有的帧,我需要一个帧缓冲区。 我真的不知道如何简单地实现帧缓冲区。 任何帮助将不胜感激。

【问题讨论】:

鉴于单个处理线程无法跟上捕获率,您可能需要多个处理线程。这看起来像是单生产者多消费者设置的经典候选。 【参考方案1】:

您需要创建异步运行的线程。当您捕获图像时,使用捕获线程将其添加到std::queue,然后让您的处理线程从队列中拉出。尝试尽可能多地使用指针来减少图像的内存使用和处理时间。确保您是线程安全的,并在适当的时候使用std::Mutex

由于您使用的是 QT,因此您可以将 QQueue 用于队列,将 QMutex 用于互斥锁。

【讨论】:

能否请您在捕获端和处理端写一个简单的代码?只是为了给我一个开始的想法。 如果您提供一些示例代码,我会看一下并尝试提供帮助。【参考方案2】:

如果您的处理线程比帧捕获周期慢,这意味着您的代码最终会耗尽内存。您应该考虑降低捕获帧速率、丢帧或降低帧分辨率。

至于缓冲区,为帧选择一个线程安全的循环队列,其中捕获线程将是生产者,处理线程将是消费者。如果队列已满(很明显),您有两种选择:(1) 删除最旧的(但未处理的)一个并添加新的。 (2) 只需删除最新的帧,这很容易实现。

【讨论】:

以上是关于用于视频处理的图像缓冲区 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用多线程处理和保存图像

在opencv中读取视频文件的连续图像

基于机器学习的视频防抖处理

处理来自内存缓冲区的视频流

直播流程

使用缓冲区进行Python视频处理 - 执行两个线程时出错