Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/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
Matlab中的跳帧与电影文件检索_Matlab_Video - Fatal编程技术网

Matlab中的跳帧与电影文件检索

Matlab中的跳帧与电影文件检索,matlab,video,Matlab,Video,我试图在Matlab中处理一个视频,我使用VideoReader读入该视频。我可以毫无问题地处理这些帧,但我只想处理每五帧。我尝试过使用step函数,但这对我的videoreader对象不起作用。现在我可以调用readFrame五次,但这显然会减慢整个过程(视频素材太多)。如何有效地跳过五帧、处理五帧、跳过另五帧。。。使用Matlab 错误消息: 类型为“VideoReader”的输入参数的未定义函数“step” 但是,在步骤上调用帮助函数会得到以下示例: WORKED=step(VR,DELT

我试图在Matlab中处理一个视频,我使用
VideoReader
读入该视频。我可以毫无问题地处理这些帧,但我只想处理每五帧。我尝试过使用step函数,但这对我的videoreader对象不起作用。现在我可以调用
readFrame
五次,但这显然会减慢整个过程(视频素材太多)。如何有效地跳过五帧、处理五帧、跳过另五帧。。。使用Matlab

错误消息:
类型为“VideoReader”的输入参数的未定义函数“step”

但是,在
步骤
上调用
帮助
函数会得到以下示例:

WORKED=step(VR,DELTA)
Moves the frame counter by DELTA frames for video VR.  This is a 
generalization of NEXT.  Returns 0 on an unsuccessful step.  Note that 
not all plugins support stepping, especially with negative numbers.  In 
the following example, both IM1 and IM2 should be the same for most 
plugins.
  vr = videoReader(...myurl...);
  if (~next(vr)), error('couldn''t read first frame'); end
      im1 = getframe(vr);
  if (~step(vr,-1)), error('could not step back to frame 0'); end
      im2 = getframe(vr);
  if (any(im1 ~= im2)), 
      error('first frame and frame 0 are not the same'); 
  end
  vr = close(vr);
FNUM should be an integer.

After the videoReader constructor is called, NEXT, SEEK, or step should
be called at least once before GETFRAME is called. 

在这里,
步骤
显然是在
视频阅读器
对象上调用的,不是吗?非常感谢您的帮助。

我也遇到过这个问题。在不使用不推荐的代码的情况下,执行您正在尝试的操作的唯一方法是为每个输出帧调用五次。这是缓慢和非常低效的。但是,如果使用不推荐的方法(并且假设视频是文件而不是流),也可以指定帧编号。我不知道为什么数学在这方面倒退了。我建议您询问一下,并说明为什么此功能对您很重要


同时,您可以尝试我的功能,从视频文件中提取特定帧。它尝试使用不推荐的
read
方法,如果失败,则返回到
readFrame
。我发现在我自己的应用程序中,使用1080p60fps的MPEG-4视频,读取
方法的速度要快十倍。请随意修改代码以满足您的需要。

我也遇到过这个问题。在不使用不推荐的代码的情况下,执行您正在尝试的操作的唯一方法是为每个输出帧调用五次。这是缓慢和非常低效的。但是,如果使用不推荐的方法(并且假设视频是文件而不是流),也可以指定帧编号。我不知道为什么数学在这方面倒退了。我建议您询问一下,并说明为什么此功能对您很重要


同时,您可以尝试我的功能,从视频文件中提取特定帧。它尝试使用不推荐的
read
方法,如果失败,则返回到
readFrame
。我发现在我自己的应用程序中,使用1080p60fps的MPEG-4视频,读取
方法的速度要快十倍。请随意修改代码以满足您的需要。

不知道这是否仍然有用,但我已经找到了解决这个问题的方法

当readFrame读取由vid.CurrentTime属性提供的当前帧时,您只需按要跳过的帧数将该属性前进即可

vid = VideoReader('myvid.mpeg')
vidFig = figure();
currAxes = axes;

n = 10;

while hasFrame(vid) 
vidFrame = readFrame(vid);
vid.CurrentTime = vid.CurrentTime + n/vid.FrameRate; 
image(vidFrame, 'Parent', currAxes);
currAxes.Visible = 'off';
end

更改n的值会使视频跳过每个循环中的帧数。我希望这能有所帮助。

我不知道这是否仍然有用,但我已经找到了解决这个问题的方法

当readFrame读取由vid.CurrentTime属性提供的当前帧时,您只需按要跳过的帧数将该属性前进即可

vid = VideoReader('myvid.mpeg')
vidFig = figure();
currAxes = axes;

n = 10;

while hasFrame(vid) 
vidFrame = readFrame(vid);
vid.CurrentTime = vid.CurrentTime + n/vid.FrameRate; 
image(vidFrame, 'Parent', currAxes);
currAxes.Visible = 'off';
end

更改n的值会使视频跳过每个循环中的帧数。我希望这有帮助。

什么Matlab版本?
VR
不等于
VR
。接下来的
getframe
函数是什么?你是如何调用
step
的?为什么
step
要在里面创建自己的
VideoReader
对象?是你编写的
step
函数,还是它实际上来自于的方法?什么Matlab版本?
VR
不等于
VR
。接下来的
getframe
函数是什么?您如何调用
step
,为什么
step
要在里面创建自己的
VideoReader
对象?是您编写的
step
函数还是实际上来自的方法?谢谢您的快速回答!我将试用read函数,看看它是否能加快进程。谢谢你快速的回答!我将试用read函数,看看它是否能加快进程。