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

时间:2017-06-14 11:59:01

标签: c++ qt opencv qthread

我想用Qt和opencv开发一个应用程序,以便处理从摄像机传来的所有帧。 我有2个Qthread,一个用于捕获图像,另一个用于处理。 处理线程有点慢,所以为了处理所有帧,我需要一个帧缓冲区。 我真的不知道如何简单地阻止帧缓冲区。 任何帮助都会得到赞赏。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

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