用于视频处理的图像缓冲区 [关闭]
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) 只需删除最新的帧,这很容易实现。
【讨论】:
以上是关于用于视频处理的图像缓冲区 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章