【发布时间】:2012-07-27 22:56:38
【问题描述】:
我是 Matlab 处理的新手,我想在“for 循环”(或不使用它)内读取和处理大型视频(超过 200k 帧)。特别是,我想:
- 使用 VideoReader 阅读视频,
- 将视频细分为 n-epoch,每帧 1000 帧,
- 处理每个 epoch 1000 帧,读取:epoch 的第一帧,跳过两帧,读取帧,跳过两帧,以此类推(例如 i=1:3:nFrames),
- 考虑到我需要将读取的每个“RGB 帧”转换为 im2bw 的每个时期
- 转换后,我需要考虑第一个视频帧(“mov(1,1).cdata”)和在该时期内读取的每个帧,进行“corr2”2D 互相关,
- 将“corr2”的结果存储到向量中。
总之,这就是我需要做的。谢谢大家
这是我目前所拥有的,关于“corr2”:
for frame_ind = 1 : nFrames
mov(frame_ind).cdata = im2bw(rgb2gray(read(xyloObj,frame_ind)),0.20);
end
%% Corr2 to compare BW video frames
for frame_ind2 = 1:(frame_ind-1)
R(frame_ind2)=corr2(mov(1,frame_ind2).cdata,mov(1,frame_ind2+1).cdata);
end
TF= isnan(R);
g=sum(TF);
f=(length(R)-g);
if (g~=(length(R)))
%%If Part has errors
disp('"Part_1" has video interferences/noise/problems, see "Testresult.txt" for more information.');
else
%%If Part has not errors
displ=strcat('"Part_1" has not video interferences/noise/problems.');
end
【问题讨论】:
-
您是要一次处理三帧,还是要拍摄一帧、跳过两帧、拍摄下一帧、跳过两帧等...?此外,如果您的内存不足,请不要存储所有读取的帧,只需读取帧,处理它,读取下一帧覆盖先前的值...
-
我想将整个视频细分为 1000 帧的 n-epoch,每个 epoch 都应该处理“...一帧,跳过两帧,拍摄下一帧,跳过两帧,等等。 "。
-
@8bit_Biker 因此,您不想从框架
1, 4, 7, 10, ... end开始,而是希望以三步从1:1000开始,然后以三步从1001:2000开始。对吗? -
@8bit_Biker:还请描述您打算对帧进行何种类型的处理。例如,如果您需要对连续帧进行关联,显然我们必须存储最后两个帧。正如我所解释的,我的代码始终只存储一帧只是为了减少使用的内存..
-
@Amro:我可以用三个 for 循环来实现:一个用于前 1000 帧,一个从 1001 到 fix(nframes/1000),最后一个从 fix(nframes/1000) 到nFrames...我认为有更好的方法可以做到,但我无法正确设置。
标签: matlab memory video for-loop out-of-memory