在MATLAB

时间:2016-05-23 14:49:38

标签: performance matlab video

在旧版本的MATLAB中,可以执行

V = VideoReader(filename);
for i = 1 : 10 : 1000
    sampled = read(V, i);
end

从视频中采样帧(在这种情况下每10秒)。我也想*我记得有一个V.NumberOfFrames字段实际存储了视频中的帧数。

自从MATLAB 2015a(我相信......它肯定在这个版本之后),他们已经重做了他们的VideoReader类和成员函数。现在要获得帧数,必须进行V.Duration * V.FrameRate,并且采样不再像在读取调用中选择帧索引那样简单。 read()现已弃用,应由readFrame()替换。此外,现在拍摄视频要困难得多(而且速度慢)。根据文档,现在应该读取视频

V = VideoReader(filename);
while hasFrame(V)
    frame = readFrame(V);
end

出于抽样目的,似乎必须做以下两件事之一:

1)插入模数if语句,但仍然读取每一帧

i = 0;
V = VideoReader(filename);
while hasFrame(V)
    readFrame(V);
    if mod(i, samplingRate)
        sampled = readFrame(V);
    end
    i = i + 1;
end

这种方法非常慢。对于许多视频处理来说,似乎方法稍微快一些,但

2)基于时间而不是帧的样本

readFrame文档显示了用户如何使用V.CurrentTime = x设置开始时间。我想这适用于像

这样的采样循环
t = 0
V = VideoReader(filename);
while hasFrame(V)
    V.CurrentTime = t;
    sampled = readFrame(V);
    t = t + samplingPeriod;
end

这种方法仍然非常缓慢。

这种变化似乎要么对采样过程进行模糊处理,要么大幅放慢采样过程。这个变化有解释吗?我是否错过了一些不同的第三种视频采样方法,可能更快?

0 个答案:

没有答案