【发布时间】:2015-01-22 09:14:54
【问题描述】:
我正在为我的项目使用 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。
【问题讨论】:
-
谢谢,但我已经成功地将视频分割成帧,问题是我需要一些指导来从 50 帧中选择一个关键帧。我是 matlab 新手,所以我寻求一些帮助。
-
这是我的人脸检测代码。我需要处理一个视频样本,但问题是因为视频是 50fps,所以处理速度很慢。所以我想提取 1 fps 并尝试处理它 framergb = step(videoFileReader);帧 = rgb2gray(framergb); bboxes = faceDetector.step(frame) 。这实际上考虑了每一帧。我想抢1fps。请指导我的过程
-
我已经编辑了该代码 sn-p,以提供帮助。在 Stack Overflow 上,最好在问题中显示您的代码(使用问题下的“编辑”链接进行更改并改进您的问题)。我仍然不是 100% 清楚问题是什么,但我认为其他对 Matlab 视频库了解更多的人可能已经理解或问你正确的问题来澄清你在做什么。
-
我已经分享了我的全部代码。请检查您是否可以提供帮助。需要明确的是,代码从输入视频中捕获每一帧并处理每一帧以检测人脸。现在的问题是如果输入视频是 50fps ,这会导致处理速度下降。所以我只想捕获 1fps 并处理该帧以检测人脸。
-
感谢您的帮助,我已经完成了所有的更正,并且我还突出了需要帮助的部分。可能,我想至少现在你应该明白问题到底是什么了。
标签: image matlab video matlab-cvst