Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 如何利用matlab从视频中提取特定间隔的帧_Image_Matlab_Video_Matlab Cvst - Fatal编程技术网

Image 如何利用matlab从视频中提取特定间隔的帧

Image 如何利用matlab从视频中提取特定间隔的帧,image,matlab,video,matlab-cvst,Image,Matlab,Video,Matlab Cvst,我正在使用Matlab2013a软件进行我的项目 我在将视频分割成单个帧时遇到了一个问题 我想知道如何从视频中获得特定间隔的帧。。i、 例如,我想以每秒一帧(帧/秒)的速率抓取帧。我的输入视频有50帧/秒。在代码中,我使用了step()将视频分割成帧 下面是我的代码,基本上是一个人脸检测代码(检测视频中的多个人脸)。此代码捕获视频中的每一帧(即50fp左右)并对其进行处理。我想以每秒1帧的速率处理帧。请帮帮我 clear classes; videoFileReader = vision.Vid

我正在使用Matlab2013a软件进行我的项目

我在将视频分割成单个帧时遇到了一个问题

我想知道如何从视频中获得特定间隔的帧。。i、 例如,我想以每秒一帧(帧/秒)的速率抓取帧。我的输入视频有50帧/秒。在代码中,我使用了step()将视频分割成帧

下面是我的代码,基本上是一个人脸检测代码(检测视频中的多个人脸)。此代码捕获视频中的每一帧(即50fp左右)并对其进行处理。我想以每秒1帧的速率处理帧。请帮帮我

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