繁体   English   中英

如何创建矩阵向量来存储大量图像?

[英]How to create vector of matrices to store large number of images?

我想创建矩阵向量来存储尽可能多的图像。

我知道,有可能如下所述:

vector<Mat> images1;

并在从相机获取图像的过程中,我将以1600 * 800的分辨率以100fps保存图像,如下所示:

images1.push_back(InputImage.clone());

其中InputImage是Mat并由相机指定。 由于在采集过程中创建视频会导致视频中的帧丢失或采集速度降低。

在停止图像获取之后且在停止程序之前,我将图像写入视频,如下所示:

VideoWriter writer;
writer = Videowriter("video.avi",-1,100,frameSize(1600,800),false);
for (vector<Mat>::iterator iter = images1.begin(); ier != images1.end(); iter++)
writer.write(*iter);

是正确的,因为我不确定images1可以存储大约1500张图像而不会溢出。

您实际上不必担心“溢出”,无论在您的上下文中意味着什么。

更大的问题是内存。 单个帧占用(每种颜色8位,具有3种颜色) 3 * 1600 * 800 == 3.84Mb 在100fps下,一秒钟的镜头需要0.384Gb的内存。 8GB的内存只能保存大约20秒的素材。 您需要大约24GB的内存,然后才能保留一整分钟。 还有一个原因是,广阔,广阔, 绝大部分视频编码软件在任何给定的时间,会让视频数据的几帧在内存中,并转储其余的硬盘驱动器(或将其丢弃,这取决于软件是什么目的服务)。

您可能应该做的(就是像FRAPS这样的程序所做的)是在收到帧后立即将帧转储到硬盘驱动器中。 然后,在录制完成后,您可以每天称呼它(如果需要原始视频素材),也可以开始读取文件并将其编码为压缩格式的过程。

在内存中预先分配图像矢量,以便您只需要复制帧而无需实时分配。

如果您遇到内存问题,请尝试将帧转储到文件中,操作系统将有望处理I / O。 如果不是,请尝试使用内存映射文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM