我想创建矩阵的向量来存储尽可能多的图像。
我知道,这是可能的,如下所示:
vector<Mat> images1;在从摄像头获取图像的过程中,我将以100fps的分辨率将图像保存为1600*800,如下所示:
images1.push_back(InputImage.clone());其中InputImage是由相机提供的垫子。因为在采集过程期间创建视频或者导致视频中的帧丢失或者降低采集速度。
在停止图像采集之后,在停止程序之前,我会将图像写入到视频中,如下所示:
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张图像而不会溢出。
发布于 2017-01-17 05:37:20
你真的不必担心“溢出”,无论它在你的上下文中意味着什么。
更大的问题是内存。单个帧采用(每种颜色8位,具有3种颜色) 3 * 1600 * 800 == 3.84Mb。在100fps时,1秒的素材需要0.384 of的内存。8 8GB的内存只能容纳大约20秒的素材。你需要将近24 of的内存才能容纳一整分钟。有一个原因,浩瀚,浩瀚,绝大多数视频编码软件在任何给定的时间只在内存中保留几帧视频数据,并将其余的转储到硬盘驱动器(或丢弃它,取决于软件的服务目的)。
你可能应该做的(这就是像FRAPS这样的程序所做的)是一旦你收到帧就把它们转储到硬盘驱动器上。然后,当录制完成时,您可以结束这一天(如果您需要原始视频片段),或者您可以开始读取文件并将其编码为更压缩格式的过程。
发布于 2017-01-17 06:36:11
在内存中预先分配图像向量,这样您只需要复制帧,而不需要实时分配。
如果你有内存问题,尝试将帧转储到一个文件,操作系统将有望能够处理I/O。如果没有,请尝试内存映射文件。
https://stackoverflow.com/questions/41685031
复制相似问题