Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用于视频处理的图像缓冲器_C++_Qt_Opencv_Qthread - Fatal编程技术网

C++ 用于视频处理的图像缓冲器

C++ 用于视频处理的图像缓冲器,c++,qt,opencv,qthread,C++,Qt,Opencv,Qthread,我想用Qt和opencv开发一个应用程序,以便处理从一个相机提交的所有帧。 我有两个Qthread,一个用于捕获图像,另一个用于处理。 处理线程有点慢,所以为了处理所有的帧,我需要一个帧缓冲区。 我真的不知道如何简单地推动一个帧缓冲区。 任何帮助都将被告知。如果您的处理线程比帧捕获周期慢,这意味着您的代码最终将耗尽内存。你应该考虑降低帧率,丢弃帧或者降低帧分辨率。p> 对于缓冲区,使用线程安全的循环帧队列,其中,捕获线程将是生产者,处理线程将是消费者。如果队列已满(显然会满),您有两个选项:(1

我想用Qt和opencv开发一个应用程序,以便处理从一个相机提交的所有帧。 我有两个Qthread,一个用于捕获图像,另一个用于处理。 处理线程有点慢,所以为了处理所有的帧,我需要一个帧缓冲区。 我真的不知道如何简单地推动一个帧缓冲区。
任何帮助都将被告知。

如果您的处理线程比帧捕获周期慢,这意味着您的代码最终将耗尽内存。你应该考虑降低帧率,丢弃帧或者降低帧分辨率。p>
对于缓冲区,使用线程安全的循环帧队列,其中,捕获线程将是生产者,处理线程将是消费者。如果队列已满(显然会满),您有两个选项:(1)删除最旧(但未处理)的队列,然后添加新的队列。(2) 只需删除最新的帧,这很容易实现。

如果处理线程比帧捕获周期慢,这意味着您的代码最终将耗尽内存。你应该考虑降低帧率,丢弃帧或者降低帧分辨率。p>
对于缓冲区,使用线程安全的循环帧队列,其中,捕获线程将是生产者,处理线程将是消费者。如果队列已满(显然会满),您有两个选项:(1)删除最旧(但未处理)的队列,然后添加新的队列。(2) 只需删除最新的框架,这非常容易实现。

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


由于您使用的是QT,因此可以将其用于队列和互斥

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


由于您使用的是QT,因此可以将其用于队列和互斥

我可以请您在捕获端和处理端编写一个简单的代码吗?给我一个开始的想法。如果你提供一些示例代码,我会看一看并尝试提供帮助。我可以请你在捕获端和处理端编写一个简单的代码吗?给我一个开始的想法。如果你提供一些示例代码,我会看一看并尝试提供帮助。考虑到单个处理线程无法跟上捕获速度,你可能需要多个处理线程。这看起来像是单生产者多消费者设置的典型候选。鉴于单个处理线程无法跟上捕获率,您可能需要多个处理线程。这看起来像是单生产者多消费者设置的经典候选。