Reading and Writing Videos and Image
Sequences in Matlab
EGGN 512 Computer Vision Colorado School of Mines, Engineering Division
Prof. William Hoff
Reading an image sequence
• You can read a sequence of files with a loop
– You can use Matlab’s “sprintf” function to create a string with the filename
of each image
– Then just read in the image using “imread”
• Use of sprintf:
str = sprintf(format, A, ...);
– where
• str is the output resulting string
• format is a string in single quotes that describes the format of the output fields
• A is the output variables
– See the Matlab help page on sprintf for a complete description of
the formatting possibilities
EGGN 512 Computer Vision Colorado School of Mines, Engineering Division
Prof. William Hoff
2
Reading an image sequence
• Example:
szDirectory = 'sequence300';
% Directory name where images are stored
% Read in images. Note - it is slow for Matlab to incrementally "grow" an
% array; in this case, when reading in each image from 1 to 300.
% It is much faster if you pre-allocate the storage. We can get the same
% effect here by reading in the images from 300 down to 1.
for i=300:-1:1
fname = sprintf('%s/image%04d.jpg', szDirectory, i);
I = imread(fname);
:
Note – if you are going to do computations on the images
end
(such as estimating the mean or median) you should convert
the images to type double
• You can also use Matlab’s “dir” command to give you a list of
all files in a directory
EGGN 512 Computer Vision Colorado School of Mines, Engineering Division
Prof. William Hoff
3
Reading Movie Files in Matlab
• Matlab can read “avi”, “mpg”, and “wmv” movie files
VideoReader.getFileFormats()
% see full list
• To get information about the movie:
movieObj = VideoReader('xylophone.mpg'); % open file
get(movieObj)
% display all info
nFrames = movieObj.NumberOfFrames;
width = movieObj.Width;
% get image width
height = movieObj.Height;
% get image height
• To read images one at a time:
for i=1:nFrames
img = read(movieObj,i);
:
end
% get one RGB image
EGGN 512 Computer Vision Colorado School of Mines, Engineering Division
Prof. William Hoff
4
Example
clear all
close all
movieObj = VideoReader('xylophone.mpg'); % open file
get(movieObj)
% display all information about movie
nFrames = movieObj.NumberOfFrames;
% Read every other frame from this movie.
for iFrame=1:2:nFrames
I = read(movieObj,iFrame);
% get one RGB image
fprintf('Frame %d\n', iFrame);
imshow(I,[]);
% Display image
% Pause a little so we can see the image.
% waits until a key is pressed.
pause(0.1);
If no argument is given, it
end
EGGN 512 Computer Vision Colorado School of Mines, Engineering Division
Prof. William Hoff
Reading (continued)
• Reading frames one at a time is slow ... an alternative is to
read all of them at once (takes more memory)
images = read(movieObj);
% get all images
– This creates a 4-dimensional array, of size (height, width, 3, nFrames)
I = images(:,:,:,i); % get the ith image
• You can also read an interval (say from 100 to 200)
images = read(movieObj, [100 200]);
• Note on wmv files (see Matlab help page for more
information)
– Some formats (including wmv) store video at a variable frame rate
– On these files, VideoReader cannot determine the number of frames
until you read the last frame
– It may return a warning that it can’t determine the number of frames
EGGN 512 Computer Vision Colorado School of Mines, Engineering Division
Prof. William Hoff
Writing Movie Files in Matlab
• To create a movie (avi format)
vidObj = VideoWriter(‘mymovie.avi'); % create avi file
open(vidObj);
:
% Add next frame to movie
imshow(img);
newFrameOut = getframe;
writeVideo(vidObj,newFrameOut);
:
close(vidObj);
% all done, close file
EGGN 512 Computer Vision Colorado School of Mines, Engineering Division
Prof. William Hoff
7