Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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_Frames - Fatal编程技术网

Image 如何在MATLAB中从视频中选择特定帧?

Image 如何在MATLAB中从视频中选择特定帧?,image,matlab,video,frames,Image,Matlab,Video,Frames,我正在做一个关于唇部识别的项目,我必须以每秒30帧的帧速率读取录制的视频,因此,如果我有70帧,我只需要每8帧获取或选择一个代表帧,因为数据集中具有帧数的最短视频是16帧,但我的问题是每8帧调整for循环,而且它无法读取任何帧是视频阅读器的问题??因此,如果您有任何想法,我将不胜感激 谢谢, v = VideoReader('1 - 1.avi'); s = floor((size(v,4))/8); for t =1:s:size(v,4) img = read(s,i); y = imres

我正在做一个关于唇部识别的项目,我必须以每秒30帧的帧速率读取录制的视频,因此,如果我有70帧,我只需要每8帧获取或选择一个代表帧,因为数据集中具有帧数的最短视频是16帧,但我的问题是每8帧调整for循环,而且它无法读取任何帧是视频阅读器的问题??因此,如果您有任何想法,我将不胜感激 谢谢,

v = VideoReader('1 - 1.avi');
s = floor((size(v,4))/8);
for t =1:s:size(v,4)
img = read(s,i);
y = imresize(img,[100,120];
我会采取行动,修改代码来解释-

%%// Paramters
sampling_factor = 8;
resizing_params = [100 120];

%%// Input video
xyloObj = VideoReader('xylophone.mpg');

%%// Setup other parameters
nFrames = floor(xyloObj.NumberOfFrame/sampling_factor); %%// xyloObj.NumberOfFrames;
vidHeight = resizing_params(1); %// xyloObj.Height;
vidWidth = resizing_params(1); %// xyloObj.Width;

%// Preallocate movie structure.
mov(1:nFrames) = struct('cdata', zeros(vidHeight, vidWidth, 3, 'uint8'),'colormap',[]);

%// Read one frame at a time.
for k = 1 :nFrames
    IMG = read(xyloObj, (k-1)*sampling_factor+1);
    %// IMG = some_operation(IMG);
    mov(k).cdata = imresize(IMG,[vidHeight vidWidth]);
end

%// Size a figure based on the video's width and height.
hf = figure;
set(hf, 'position', [150 150 vidWidth vidHeight])

%// Play back the movie once at the video's frame rate.
movie(hf, mov, 1, xyloObj.FrameRate);

基本上,我所做的唯一改变是“nFrames”和围绕它的其他因素。尝试更改“采样系数”,看看是否有意义。此外,我还添加了您在代码末尾执行的图像大小调整。

您可以通过从视频中读取帧并将其存储在单元阵列中来完成此任务。从单元数组中,通过如下定制for循环,您可以轻松读取所需的任何帧

for i=1:8:n
  frame = cell{i};
  process(frame)
end
  • 单元格:它包含视频中的所有帧

  • 过程:它是执行任务的功能

  • n:视频中的帧数

如果要获取有关从视频读取帧并存储到单元阵列的更多信息,请访问以下链接:


太好了!!这正是我想要的,你刚才提到的关于采样因子的部分,真的谢谢你,但是现在有没有一种方法可以分别对每一帧执行一些操作,因为我想从RGB格式更改为灰度格式,并且特征提取需要对每一帧本身进行处理,而不是对整个电影进行处理??为了获得更多的间隙,我可以分别显示每一帧吗?为了显示图像,在IMG从“读取”命令获取数据后,您可以使用“imshow(IMG)”。如果希望处理RGB2GRAY、边缘检测等操作,则至少需要更改结构mov以仅接受来自每个帧的二维数据。我认为,您可以在这些2D数据上使用imshow。