## Reading video file to Matlab?

on 18 Jan 2013

### Image Analyst (view profile)

Hi friends can any one help me how to read video file(.avi) and process it frame by frame as an image. I tried with

img = getsnapshot(vid1) ;

figure,imshow(img);

but its not working. Any suggestions

srikanth

### srikanth (view profile)

on 18 Jan 2013

friends can some one help me on this...... i got stuck because of this

srikanth

### srikanth (view profile)

on 18 Jan 2013

i am getting an error saying

Undefined function or method 'getsnapshot' for input arguments of type 'uint8'

srikanth

### srikanth (view profile)

on 18 Jan 2013

version of matlab i am using is 7.9.0.529(R2009b)........

## Products

No products are associated with this question.

### Image Analyst (view profile)

on 18 Jan 2013

See if this demo helps you any:

```% Demo macro to extract frames and get frame means from an avi movie
% and save individual frames to separate image files.
% Also computes the mean gray value of the color channels.
clc;    % Clear the command window.
close all;  % Close all figures (except those of imtool.)
imtool close all;  % Close all imtool figures.
clear;  % Erase all existing variables.
workspace;  % Make sure the workspace panel is showing.
fontSize = 14;
```
```% Change the current folder to the folder of this m-file.
% (The line of code below is from Brett Shoelson of The Mathworks.)
if(~isdeployed)
cd(fileparts(which(mfilename)));
end
```
```% Check that user has the Image Processing Toolbox installed.
if ~hasIPT
% User does not have the toolbox installed.
message = sprintf('Sorry, but you do not seem to have the Image Processing Toolbox.\nDo you want to try to continue anyway?');
reply = questdlg(message, 'Toolbox missing', 'Yes', 'No', 'Yes');
% User said No, so exit.
return;
end
end
```
```% Open the rhino.avi demo movie that ships with MATLAB.
folder = fullfile(matlabroot, '\toolbox\images\imdemos');
movieFullFileName = fullfile(folder, 'rhinos.avi');
% Check to see that it exists.
if ~exist(movieFullFileName, 'file')
strErrorMessage = sprintf('File not found:\n%s\nYou can choose a new one, or cancel', movieFullFileName);
response = questdlg(strErrorMessage, 'File not found', 'OK - choose a new movie.', 'Cancel', 'OK - choose a new movie.');
if strcmpi(response, 'OK - choose a new movie.')
[baseFileName, folderName, FilterIndex] = uigetfile('*.avi');
if ~isequal(baseFileName, 0)
movieFullFileName = fullfile(folderName, baseFileName);
else
return;
end
else
return;
end
end
```
```try
% Determine how many frames there are.
numberOfFrames = videoObject.NumberOfFrames;
vidHeight = videoObject.Height;
vidWidth = videoObject.Width;

numberOfFramesWritten = 0;
% Prepare a figure to show the images in the upper half of the screen.
figure;
% 	screenSize = get(0, 'ScreenSize');
% Enlarge figure to full screen.
set(gcf, 'units','normalized','outerposition',[0 0 1 1]);

% Loop through the movie, writing all frames out.
% Each frame will be in a separate file with unique name.
meanGrayLevels = zeros(numberOfFrames, 1);
meanRedLevels = zeros(numberOfFrames, 1);
meanGreenLevels = zeros(numberOfFrames, 1);
meanBlueLevels = zeros(numberOfFrames, 1);
for frame = 1 : numberOfFrames
% Extract the frame from the movie structure.

% Display it
hImage = subplot(2, 2, 1);
image(thisFrame);
caption = sprintf('Frame %4d of %d.', frame, numberOfFrames);
title(caption, 'FontSize', fontSize);
drawnow; % Force it to refresh the window.

% Calculate the mean gray level.
grayImage = rgb2gray(thisFrame);
meanGrayLevels(frame) = mean(grayImage(:));

% Calculate the mean R, G, and B levels.
meanRedLevels(frame) = mean(mean(thisFrame(:, :, 1)));
meanGreenLevels(frame) = mean(mean(thisFrame(:, :, 2)));
meanBlueLevels(frame) = mean(mean(thisFrame(:, :, 3)));

% Plot the mean gray levels.
hPlot = subplot(2, 2, 2);
hold off;
plot(meanGrayLevels, 'k-', 'LineWidth', 2);
hold on;
plot(meanRedLevels, 'r-');
plot(meanGreenLevels, 'g-');
plot(meanBlueLevels, 'b-');
grid on;

% Put title back because plot() erases the existing title.
title('Mean Gray Levels', 'FontSize', fontSize);
if frame == 1
xlabel('Frame Number');
ylabel('Gray Level');
% Get size data later for preallocation if we read
% the movie back in from disk.
[rows columns numberOfColorChannels] = size(thisFrame);
end

% Update user with the progress.  Display in the command window.
progressIndication = sprintf('Processed frame %4d of %d.', frame, numberOfFrames);
disp(progressIndication);
% Increment frame count (should eventually = numberOfFrames
% unless an error happens).
numberOfFramesWritten = numberOfFramesWritten + 1;

% Now let's do the entropy filter.
% First get a gray level image
grayImage = rgb2gray(thisFrame);
subplot(2, 2, 3);
imshow(grayImage);
caption = sprintf('Gray Scale Image, frame #%d', frame);
title(caption, 'FontSize', fontSize);
% Display the filtered image.
entropyFilteredImage = entropyfilt(grayImage);
subplot(2, 2, 4);
imshow(entropyFilteredImage, []);
caption = sprintf('Entropy Filtered Image, frame #%d', frame);
title(caption, 'FontSize', fontSize);
end

% Alert user that we're done.
finishedMessage = sprintf('Done!  It processed %d frames of\n"%s"', numberOfFramesWritten, movieFullFileName);
disp(finishedMessage); % Write to command window.
uiwait(msgbox(finishedMessage)); % Also pop up a message box.

catch ME
% Some error happened if you get here.
stError = lasterror;
strErrorMessage = sprintf('Error extracting movie frames from:\n\n%s\n\nError: %s\n\n)', movieFullFileName, stError.message);
uiwait(msgbox(strErrorMessage));
end
```

Image Analyst

### Image Analyst (view profile)

on 20 Jan 2013

OK. But after 4 years it sounds like it's time to upgrade.

rock

### rock (view profile)

on 21 May 2013

what about other formats like 3gp,flv,mp4 etc.....................

Image Analyst

### Image Analyst (view profile)

on 21 May 2013

I don't know. It might depend on what decoders you have on your system, but I haven't tried any of those formats personally.

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi test