C++ 用于视频处理的图像缓冲器
我想用Qt和opencv开发一个应用程序,以便处理从一个相机提交的所有帧。 我有两个Qthread,一个用于捕获图像,另一个用于处理。 处理线程有点慢,所以为了处理所有的帧,我需要一个帧缓冲区。 我真的不知道如何简单地推动一个帧缓冲区。C++ 用于视频处理的图像缓冲器,c++,qt,opencv,qthread,C++,Qt,Opencv,Qthread,我想用Qt和opencv开发一个应用程序,以便处理从一个相机提交的所有帧。 我有两个Qthread,一个用于捕获图像,另一个用于处理。 处理线程有点慢,所以为了处理所有的帧,我需要一个帧缓冲区。 我真的不知道如何简单地推动一个帧缓冲区。 任何帮助都将被告知。如果您的处理线程比帧捕获周期慢,这意味着您的代码最终将耗尽内存。你应该考虑降低帧率,丢弃帧或者降低帧分辨率。p> 对于缓冲区,使用线程安全的循环帧队列,其中,捕获线程将是生产者,处理线程将是消费者。如果队列已满(显然会满),您有两个选项:(1
任何帮助都将被告知。如果您的处理线程比帧捕获周期慢,这意味着您的代码最终将耗尽内存。你应该考虑降低帧率,丢弃帧或者降低帧分辨率。p>
对于缓冲区,使用线程安全的循环帧队列,其中,捕获线程将是生产者,处理线程将是消费者。如果队列已满(显然会满),您有两个选项:(1)删除最旧(但未处理)的队列,然后添加新的队列。(2) 只需删除最新的帧,这很容易实现。如果处理线程比帧捕获周期慢,这意味着您的代码最终将耗尽内存。你应该考虑降低帧率,丢弃帧或者降低帧分辨率。p>
对于缓冲区,使用线程安全的循环帧队列,其中,捕获线程将是生产者,处理线程将是消费者。如果队列已满(显然会满),您有两个选项:(1)删除最旧(但未处理)的队列,然后添加新的队列。(2) 只需删除最新的框架,这非常容易实现。您需要创建异步运行的线程。捕获图像时,使用捕获线程将其添加到
std::queue
,然后让处理线程从队列中拉出。尽量使用指针,以减少内存使用和处理时间。确保线程安全,并在适当时使用std::Mutex
由于您使用的是QT,因此可以将其用于队列和互斥 您需要创建异步运行的线程。捕获图像时,使用捕获线程将其添加到
std::queue
,然后让处理线程从队列中拉出。尽量使用指针,以减少内存使用和处理时间。确保线程安全,并在适当时使用std::Mutex
由于您使用的是QT,因此可以将其用于队列和互斥 我可以请您在捕获端和处理端编写一个简单的代码吗?给我一个开始的想法。如果你提供一些示例代码,我会看一看并尝试提供帮助。我可以请你在捕获端和处理端编写一个简单的代码吗?给我一个开始的想法。如果你提供一些示例代码,我会看一看并尝试提供帮助。考虑到单个处理线程无法跟上捕获速度,你可能需要多个处理线程。这看起来像是单生产者多消费者设置的典型候选。鉴于单个处理线程无法跟上捕获率,您可能需要多个处理线程。这看起来像是单生产者多消费者设置的经典候选。