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

时间:2017-01-16 21:10:21

标签: c++ image opencv matrix

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

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

vector<Mat> images1;

在从相机获取图像时,我将以100fps的速度保存图像,分辨率为1600 * 800,如下所示:

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张图像而不会溢出。

2 个答案:

答案 0 :(得分:0)

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

更大的问题是记忆。单帧采用(每种颜色8位,3种颜色)3 * 1600 * 800 == 3.84Mb。在100fps,一秒钟的镜头需要0.384Gb的内存。 8GB的内存只能容纳约20秒的镜头。你需要几乎24GB的内存才能持续一分钟。有一个原因是视频编码软件的庞大,广泛,<强>大量大多数只在任何给定时间内将几帧视频数据保存在内存中,并将其余部分转储到硬盘驱动器上(或丢弃它,取决于软件服务的目的。)

你应该做的事情(FRAPS这样的程序)会在你收到它们后立即将帧转储到硬盘上。然后,当录制结束时,您可以每天调用它(如果您需要原始视频素材),或者您可以开始读取文件并将其编码为更加压缩的格式。

答案 1 :(得分:0)

在内存中预分配图像矢量,这样您只需复制帧而无需实时分配。

如果您遇到内存问题,请尝试将帧转储到文件中,操作系统希望能够处理I / O.如果没有尝试内存映射文件。