[英]How to extract frames at particular intervals from video using matlab
我正在为我的项目使用matlab 2013a软件。
将视频分割成单独的帧时遇到问题。
我想知道如何以特定的间隔从视频中获取帧。即,我想以每秒一帧(帧/秒)的速率抓取帧。我的输入视频具有50帧/秒。 在代码中,我使用step()将视频切成帧。
以下是我的代码,基本上是面部检测代码(检测视频中的多个面部)。 此代码捕获视频中的每个帧(即约50fp)并对其进行处理。 我想以1 fps的速率处理帧。 请帮我。
clear classes;
videoFileReader = vision.VideoFileReader('C:\Users\Desktop\project\05.mp4');
**videoFrame = step(videoFileReader);**
faceDetector = vision.CascadeObjectDetector(); % Finds faces by default
tracker = MultiObjectTrackerKLT;
videoPlayer = vision.VideoPlayer('Position',[200 100 fliplr(frameSize(1:2)+30)]);
bboxes = [];
while isempty(bboxes)
**framergb = step(videoFileReader);**
frame = rgb2gray(framergb);
bboxes = faceDetector.step(frame);
end
tracker.addDetections(frame, bboxes);
frameNumber = 0;
keepRunning = true;
while keepRunning
**framergb = step(videoFileReader);**
frame = rgb2gray(framergb);
if mod(frameNumber, 10) == 0
bboxes = 2 * faceDetector.step(imresize(frame, 0.5));
if ~isempty(bboxes)
tracker.addDetections(frame, bboxes);
end
else
% Track faces
tracker.track(frame);
end
end
%% Clean up
release(videoPlayer);
但这实际上考虑了每个帧。 我想抓取1fps。
由于视频访问库未提供所需的功能,因此无法直接在Matlab 2013a中完成。 仅使用Matlab代码实际上不可能编写必要的代码来实现有效的跳帧例程(您需要查看视频库的内部)
要解决此问题,您有两个基本选项:
您目前在哪里
framergb = step(videoFileReader);
而是做类似的事情
for i=1:49,
step(videoFileReader);
end
framergb = step(videoFileReader);
(注意,这不允许超出输入范围)
ffmpeg
类的工具对文件进行预处理,然后在使用Matlab之前降低帧速率。 ffmpeg
命令可能看起来像这样:
ffmpeg -i 05.mp4 -r 1 05_at_1fps.mp4
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.