我想用Qt和opencv开发一个应用程序,以便处理从摄像机传来的所有帧。 我有2个Qthread,一个用于捕获图像,另一个用于处理。 处理线程有点慢,所以为了处理所有帧,我需要一个帧缓冲区。 我真的不知道如何简单地阻止帧缓冲区。 任何帮助都会得到赞赏。
答案 0 :(得分:3)
您希望创建线程以异步方式运行。捕获图像时,使用捕获线程将其添加到std::queue
,然后让处理线程从队列中拉出。尝试尽可能多地使用指针来减少图像内存使用和处理时间。确保您的线程安全,并在适当时使用std::Mutex
。
答案 1 :(得分:0)
如果您的处理线程比帧捕获周期慢,这意味着您的代码最终会耗尽内存。您应该考虑降低捕获帧速率,丢帧或降低帧分辨率。
对于缓冲区,请为框架选择线程安全循环队列,其中,捕获线程将是生产者,处理线程将是使用者。如果队列已满(很明显),您有两个选择:(1)删除最旧的(但未处理)并添加新的。 (2)只需删除最新的框架,这很容易实现。