所以我刚开始用MATLAB中的图像处理/计算机视觉。帧到视频转换matlab
所以我的第一个任务是将一系列图像(帧)转换为视频。所以我通过在线资源(更具体地说是MATLAB网站)来获得一种方法来实现它。
所以我实施的是http://www.mathworks.com/help/matlab/examples/convert-between-image-sequences-and-video.html,它解决了我的问题。
但是,当我播放它时,视频在某些地方似乎有点跳动。就像它会在中间带来一个不同的框架,并使整个视频跳跃在那一瞬间。它发生在视频中的几个地方。
任何人都知道为什么会发生这种情况?
感谢
PS下面是我的代码使用方法:
myFolder = 'C:\Users\owner\Desktop\MATLAB GUI\Color\Color'; %Specify Directory
filePattern = fullfile(myFolder, '*.jpg') %identify jpg files
jpegFiles = dir(filePattern) %use dir to list jpg files
size = length(jpegFiles); % length of the size of the file
outputVideo = VideoWriter(fullfile(myFolder,'video1.avi'));
outputVideo.FrameRate = 30;
open(outputVideo);
for i = 1:length(jpegFiles) %load all the files in the directory
j = i; %%accumulating the number of jpegfiles into handles.j
baseFileName = jpegFiles(i).name;
fullFileName = fullfile(myFolder, baseFileName);
%fprintf(1, 'Now reading %s\n', fullFileName); %filename of image
imageArray = imread(fullFileName); %image being read
%imageArray = rgb2gray(imageArray);
imagecell{i} = imageArray; %storing the images in imagecells
writeVideo(outputVideo,imagecell{i});
end
close(outputVideo);
video1 = VideoReader(fullfile(myFolder,'video1.avi'));
mov(video1.NumberOfFrames) = struct('cdata',[],'colormap',[]);
for ii = 1:video1.NumberOfFrames
mov(ii) = im2frame(read(video1,ii));
end
set(gcf,'position', [150 150 video1.Width video1.Height])
set(gca,'units','pixels');
set(gca,'position',[0 0 video1.Width video1.Height])
image(mov(1).cdata,'Parent',gca);
axis off;
movie(mov,1,video1.FrameRate);
jpg文件的名称是什么?我在问,因为你怎么知道你读取文件的顺序是正确的帧顺序?例如,如果在读取文件列表并写入视频对象时,您的文件被命名为frame1.jpg,frame2.jpg,...,frame10.jpg,frame11.jpg等,则图像可能会被排序作为frame1.jpg,frame10.jpg,frame11.jpg,...,frame19.jpg,frame2.jpg等等。所以这可能是为什么每第十个图像不合适的原因。从'fullFileName = fullfile(myFolder,baseFileName)'中移除分号,然后重新运行脚本并查看文件顺序。 – Geoff
另外 - 您已经命名并指定了文件数的长度,如下所示:size = length(jpegFiles);'。 'size'是一个内置的MATLAB函数,所以如果你曾经(在代码的后面的行中)尝试使用'size'函数,给一个变量赋一个相同的名字将会成为一个问题。请将其重命名为'numOfFiles'。 – Geoff
'dir'也存在问题,它按照操作系统给出的顺序输入,可能不会按名称排序。我建议你检查你的'jpegfiles'单元格,看看这些文件是否按正确的顺序读取。 – Nishant