Image frames in wrong order when playing back as video
Afficher commentaires plus anciens
Hello, I am doing a 3D plot based on intensity from a series of video frames I am extracting from a file. I have implemented a sort for the video frames by name, but I can't figure out how to tweak this code such that I can play the 3D animation in the right frame order. Here is the code:
%Create working directory and name
workingDir=tempname;
mkdir(workingDir);
mkdir(workingDir, 'images');
vids1=VideoReader('trimmedshort1_4.mov');
%select frames, extract, convert to intensity
for ii=1100:1200
img1=read(vids1,ii);
[img1index, map]=rgb2ind(img1, 256);
J=ind2gray(img1index,map);
I_I2=imcomplement(J);
%colormap(map);
%adjust intensity
J1 = imadjust(I_I2,[],[],5);
imshow(J1)
colormap(jet)
imwrite(J1,jet,fullfile(workingDir,'images',sprintf('img%d.jpg',ii)))
colormap(jet)
mesh(double(J1))
end
%sort into proper order
imageNames = dir(fullfile(workingDir,'images','*.jpg'));
disp(imageNames)
imageNames = {imageNames.name}';
imageStrings = regexp([imageNames{:}],'(\d*)','match');
imageNumbers = str2double(imageStrings);[~,sortedIndices] = sort(imageNumbers);
sortedImageNames = imageNames(sortedIndices);
disp(sortedImageNames)
%write video file
outputVideo = VideoWriter('vidout.avi');
outputVideo.FrameRate = vids1.FrameRate;
open(outputVideo);
for iii = 1:length(sortedImageNames)
img = imread(fullfile(workingDir,'images',sortedImageNames{iii}));
writeVideo(outputVideo,J1);
end
I am working on a Mac and can't read the output .avi file, also. thanks, I promise once I get better at this I will also try to be of some help to others.
Réponse acceptée
Plus de réponses (0)
Catégories
En savoir plus sur Video Formats and Interfaces dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!