Convert AVI file to series of images

Hi all,
I have a AVI file that was formatted in MATLAB. I wish to convert it to a series of tif images. I am not able to do this in imageJ. Is it possible?
NS

 Réponse acceptée

Chandra Kurniawan
Chandra Kurniawan le 11 Mar 2012
Hi,
This is the simpler version :
obj = mmreader('rhinos.avi');
vid = read(obj);
frames = obj.NumberOfFrames;
for x = 1 : frames
imwrite(vid(:,:,:,x),strcat('frame-',num2str(x),'.tif'));
end
You can use your own video by replacing 'rhinos.avi' with your own.
I hope this works!

4 commentaires

NS
NS le 11 Mar 2012
Thanks Chandra. The code works perfectly.
SBunny
SBunny le 14 Juin 2013
Thank you so much
Farhan Ferdous
Farhan Ferdous le 6 Juil 2017
which directory will I get the images?
Image Analyst
Image Analyst le 6 Juil 2017
He did not specify a folder, unfortunately, so the images will go into the current folder, the same one as the m-file.

Connectez-vous pour commenter.

Plus de réponses (3)

Elijah Galbreath
Elijah Galbreath le 30 Juin 2021
outputFolder = uigetdir(path);
% Read in the video
viddir = uigetdir(path);
viddir = fullfile(viddir,'test.avi');
obj = VideoReader(viddir);
vid = read(obj);
% Number of frames
frames = obj.NumFrames;
for x = 1 : frames
%Create a filename
outputBaseFileName = sprintf('Frame %4.4d.png', x);
outputFullFileName = fullfile(outputFolder, outputBaseFileName);
imwrite(vid(:,:,:,x), outputFullFileName, 'png');
end
Image Analyst
Image Analyst le 11 Mar 2012
Here are the key lines:
outputFolder = 'c:/users/whatever'; % Change this!
% Read in the movie.
mov = aviread(movieFullFileName);
% Determine how many frames there are.
numberOfFrames = size(mov, 2);
for frame = 1 : numberOfFrames
% Extract the frame from the movie structure.
thisFrame = mov(frame).cdata;
% Create a filename.
outputBaseFileName = sprintf('Frame %4.4d.png', frame);
outputFullFileName = fullfile(outputFolder, outputBaseFileName);
% Write it out to disk.
imwrite(thisFrame, outputFullFileName, 'png');
end

14 commentaires

NS
NS le 11 Mar 2012
Hi Image Analyst.
Thank you for your answer. The code is very long and I am a little confused with the content. Could you shorten the code if possible?
Image Analyst
Image Analyst le 11 Mar 2012
Go ahead. It's well commented so you should be able to understand it. You can shorten it if you want. I think the comments should explain it very well -- what parts are confusing?
NS
NS le 11 Mar 2012
Thanks. It works now. :) I just got confused with the sheer amount of data you had given in the code.
Image Analyst
Image Analyst le 11 Mar 2012
Yes, when you make code robust and flexible like I do, and do things like displaying images with nice titles above them, and add lots of explanatory comments like I do, it does tend to make the code longer, but I think it's worth it.
AT
AT le 21 Avr 2017
Hello! I am trying this code and I get this error
No appropriate method, property, or field CData for class VideoReader.
Error in labexc (line 15) thisFrame = mov(frame).CData;
Do you know why?
Image Analyst
Image Analyst le 21 Avr 2017
That code I posted 5 years ago was before they had invented VideoReader. See newer, attached code that does use it.
AT
AT le 24 Avr 2017
thank you! Do you have code that only takes the video and creates frames and saves to file?
Image Analyst
Image Analyst le 24 Avr 2017
That's in the first half of the demo. Just chop off the second half of the script. You can also delete the part where it calls imshow() if you don't want that.
Joe Sheppard
Joe Sheppard le 28 Mar 2018
Hey, I was wondering, does converting AVI to tiff with this script compress the data at all? If so is it lossless?
Image Analyst
Image Analyst le 28 Mar 2018
The scripts I saw converted the frames to PNG, which is a lossless compression. If you saw some that used TIFF, that is uncompressed unless an option for compression is used, such as LZW. PNG usually compresses to around a third of the size. JPG can compress more but can have bad artifacts and should be avoided if you're going to do image analysis.
Joe Sheppard
Joe Sheppard le 29 Mar 2018
very nice, thanks :)
Guillaume
Guillaume le 29 Mar 2018
In matlab, the default TIFF compression mode (for RGB images) is 'packbits', so TIFF are compressed by default. packbit is a run-length encoding compression method. It is completely lossless. You can override the compression mode, the only lossy TIFF mode supported by imwrite is 'jpeg'.
PNG is always lossless and in my opinion a better format than TIFF.
Gaia Gbola
Gaia Gbola le 5 Mar 2020
Hello, I am using the DEMO imaging version for MATLAB, but your code seems not to run on it, it does not recognize the function aviread. Is it possible that is because of the version that I have?
Image Analyst
Image Analyst le 5 Mar 2020
aviread() is a really old function and it may have been removed by now. You'll need to replace it with VideoReader. See attached demos for help and examples.

Connectez-vous pour commenter.

Sushil  Sharma
Sushil Sharma le 23 Sep 2019
Modifié(e) : Sushil Sharma le 23 Sep 2019
Upadte answer
In the lestest veriosn of matlab, we have to use VideoReader instead of mmreader,then you are able to convert any video file into a frames
Here the simple of code to get the frames
%% Change .avi format to images frames
obj = VideoReader('test2.avi');
vid = read(obj);
frames = obj.NumberOfFrames;
for x = 1 : frames
imwrite(vid(:,:,:,x),strcat('frame-',num2str(x),'.png'));
end

2 commentaires

William Thielicke
William Thielicke le 3 Avr 2023
... but there is no other way than the frame-by-frame read and write? This is really slow... I am capturing data with the imaq toolbox. RAM is too small, so I am logging to disk. But I need to have individual TIFF images. Converting on a frame-to-frame basis is extremely slow with 12 bit uncompressed grayscale data...
Image Analyst
Image Analyst le 3 Avr 2023
@William Thielicke that reads the whole video into RAM and then writes out to disk one frame at a time. That's probably as fast as it can go. It's probably the call to imwrite() that is taking the time. I assume you're using SSD for your drive. You might try using a ramdisk instead of your SSD to save your individual files.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Convert Image Type 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!

Translated by