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