我正在开展一个关于嘴唇识别的项目,我必须以30 fps的帧速率读取录制的视频,所以,如果我有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];
答案 0 :(得分:1)
我会接受example for VideoReader并修改代码来解释 -
%%// 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'以及围绕它的其他因素。尝试更改'sampling_factor',看看是否有意义。另外,我添加了您在代码末尾执行的图像大小调整。
答案 1 :(得分:0)
您可以通过从视频中读取帧并将其存储在单元阵列中来完成此任务。从单元格数组中,您可以通过自定义for循环轻松读取所需的任何帧,如下所示。
for i=1:8:n
frame = cell{i};
process(frame)
end
单元格:它包含视频中的所有框架
流程:这是执行任务的功能
n :视频中的帧数
如果您想获得有关从视频中读取帧并存储到单元阵列中的更多信息,请访问以下链接:
https://naveenideas.blogspot.in/2016/07/reading-frames-from-video.html