Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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
如何在另一个matlab文件中保存帧而不使其可见_Matlab_Video - Fatal编程技术网

如何在另一个matlab文件中保存帧而不使其可见

如何在另一个matlab文件中保存帧而不使其可见,matlab,video,Matlab,Video,我有一个视频,我正在用matlab(mfile)对视频帧进行处理。然后对帧进行编译,并使用这些处理后的帧制作视频。视频中大约有300帧。由于处理相当繁重,所以我的电脑冻结了。我只是不想显示那些经过处理的帧,而是希望这些帧应该存储在另一个mfile中。我知道像saveas或set(gcf,'visible','off')这样的命令,但它们在我的情况下不起作用。 到目前为止,我所拥有的: aviobj =avifile('trail.avi','Compression','None','fps',1

我有一个视频,我正在用matlab(mfile)对视频帧进行处理。然后对帧进行编译,并使用这些处理后的帧制作视频。视频中大约有300帧。由于处理相当繁重,所以我的电脑冻结了。我只是不想显示那些经过处理的帧,而是希望这些帧应该存储在另一个mfile中。我知道像
saveas
set(gcf,'visible','off')
这样的命令,但它们在我的情况下不起作用。 到目前为止,我所拥有的:

aviobj =avifile('trail.avi','Compression','None','fps',1); %video to be made from frames
obj = aviread('highwayvideo.avi');
for 1:300
    .......... % processing
imi = getframe(gcf);
aviobj = addframe(aviobj,imi);
end
aviobj = close(aviobj);

任何帮助都将不胜感激。

这还不清楚,但听起来您正遭受某种RAM限制。MATLAB的视频转换例程非常昂贵,有更好的方法来实现这一点。我建议处理输入视频并将300帧保存为图像文件,然后使用ffmpeg将其编译成视频。您甚至可能希望使用ffmpeg将输入视频转换为输入剧照,并将剧照一次加载到matlab中

您使用当前数字的目的是什么-从发布的代码中不清楚。。。有没有可能在不在图形上显示任何内容的情况下处理obj?我的“处理”包括在框架上绘制东西。所以有必要显示它们。您是为每个帧创建新图像,还是为所有帧使用相同的图像?我的意思是——使用imshow(…);对于每一帧,它将在末尾的一个图形中创建300个图像,并且速度非常慢。另一个选择是做h=imshow(…);一次,然后设置(h,'CData',NewFrame);。或者,您可以每次删除并重新创建图形(创建图形需要时间,速度较慢,但比将所有图像放在一个图形中更有效)。您可以通过执行h=get(gcf,'Children')检查图中包含的对象数;检查h中的元素数。如果我将帧保存为图像,问题仍然与在这种情况下相同,我必须显示每个帧。实际上,“处理”包括在画框上画东西。它越来越慢的真正原因是我在同一个容器(一个轴控件)中显示它,所以所有的300帧都试图塞进它。任何其他建议。