Image 如何利用matlab从视频中提取特定间隔的帧
我正在使用Matlab2013a软件进行我的项目 我在将视频分割成单个帧时遇到了一个问题 我想知道如何从视频中获得特定间隔的帧。。i、 例如,我想以每秒一帧(帧/秒)的速率抓取帧。我的输入视频有50帧/秒。在代码中,我使用了step()将视频分割成帧 下面是我的代码,基本上是一个人脸检测代码(检测视频中的多个人脸)。此代码捕获视频中的每一帧(即50fp左右)并对其进行处理。我想以每秒1帧的速率处理帧。请帮帮我Image 如何利用matlab从视频中提取特定间隔的帧,image,matlab,video,matlab-cvst,Image,Matlab,Video,Matlab Cvst,我正在使用Matlab2013a软件进行我的项目 我在将视频分割成单个帧时遇到了一个问题 我想知道如何从视频中获得特定间隔的帧。。i、 例如,我想以每秒一帧(帧/秒)的速率抓取帧。我的输入视频有50帧/秒。在代码中,我使用了step()将视频分割成帧 下面是我的代码,基本上是一个人脸检测代码(检测视频中的多个人脸)。此代码捕获视频中的每一帧(即50fp左右)并对其进行处理。我想以每秒1帧的速率处理帧。请帮帮我 clear classes; videoFileReader = vision.Vid
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。这不能直接在Matlab2013a中完成,因为视频访问库不提供您想要的功能。编写必要的代码来实现一个高效的跳帧例程实际上不可能仅使用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
谢谢,但我已经成功地将视频分割成帧,问题是我需要一些指导,以便从50帧中选择关键帧。我是matlab新手,所以我寻求一些帮助。这是我的人脸检测代码。我需要处理一个视频样本,但问题是,由于视频是50fps,处理速度非常慢。所以我想提取1fps并尝试处理它framergb=step(videoFileReader);帧=rgb2gray(帧RGB);bboxes=面部检测器。步骤(帧)。这一个实际上考虑了每一帧。我想买1件。请指导我在代码片段中编辑的流程,以帮助我。在堆栈溢出时,最好在问题中显示代码(使用问题下的“编辑”链接进行更改并改进问题)。我仍然不是100%清楚这个问题是什么,但是我认为其他更了解Matlab视频库的人可以已经理解或者问你正确的问题来澄清你在做什么。我已经分享了我的全部代码。请检查你是否能帮忙。为了清楚起见,代码从输入视频中捕获每一帧并处理每一帧以检测人脸。现在的问题是,如果输入视频为50fps,则会导致处理速度下降。因此,我只想捕获1fps并处理该帧以检测人脸。感谢您的帮助,我已经完成了所有更正,并突出显示了需要帮助的部分。也许,我想至少现在你应该已经了解了问题的确切含义。加上1-我个人也会选择
ffmpeg
。