C ++管理较大的图像缓冲区

时间:2019-09-27 09:33:36

标签: c++ multithreading opencv buffer mat

我有一个C ++应用程序,可以读取和处理视频流。我有两个线程:一个线程读取流,第二个线程进行处理。我使用OpenCV VideoCapture访问流,并将帧(cv::Mat)放入readerwriterqueue缓冲区中。我从另一个线程读取缓冲区中的帧并进行处理。

有时处理可能会花费很多时间,并且处理线程开始落后(同时将帧以相同的速度放入队列中)。这会增加缓冲区大小,并最终可能占用所有可用内存并挂起整个系统。我知道,如果没有足够的RAM,Windows将使用pagefile,但是系统仍然变得很落后。我需要确保不会发生这种情况。

我考虑过设置缓冲区大小的限制,并在缓冲区已满时将帧卸载到磁盘上。然后在有空间时将它们读回队列中。那行得通吗?有什么好的选择吗?一个人如何处理这样的问题?我当前的方法(图像队列)有效吗?请指教。

0 个答案:

没有答案