用于视频处理的图像缓冲区

image buffer for video processing

本文关键字:图像 缓冲区 处理 视频 用于      更新时间:2023-10-16

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

您需要

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

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

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

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