2017-06-14 38 views
0

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

+1

鉴于单个处理线程无法跟上捕获速率,您可能需要多个处理线程。这看起来像是一个单生产者 - 多用户设置的经典候选人。 –

回答

0

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

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

2

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

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

+0

请问您可以在捕获端和处理端编写一个简单的代码吗?只是为了让我有想法开始。 – Atefe

+1

如果您提供一些示例代码,我会查看它并尝试提供帮助。 – Apexdev