From: Kaoutar on
hello,
I am working on a dataset of movies, and each set contains 9 videos, so i am willing to save the frames of each video in a separate folder, can anyone help me on that?? I would be very greatful. bellow is the code I am using, but this help only to save the frames of first video of the set into 'jpg' files, but i need to locate them into a folder (i). for example I have (i) videos and I would like to save the frames of video (i) in folder (i).
Hoping to hear from you!!
Thank you in advance!!
Kaoutar

addpath(genpath('C:\Users\kaoutar\Desktop\Motion'));
jacking=dir('jack'); % Contains 9 videos
no_files_bend = size(jacking,1);

for k=3:length(jacking)
jack =jacking(k).name;
Vid = aviread(jack,1:10);
for i=1:length(Vid)
imwrite(Vid(i).cdata,[num2str(i) '.jpeg'])
end
end
From: ImageAnalyst on
Kaoutar :
That's done in my demo below. Note how I create a new subfolder based
on the name of the input movie file. Then I store the individual
frames in that folder. It's very well commented so hopefully you can
follow along.
IMPORTANT: THE NEWSREADER WILL SPLIT LONG LINES INTO TWO OR MORE
LINES. BE SURE TO JOIN ANY LINES SPLIT INTO TWO OR MORE LINES.

% 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

% Open the rhino.avi demo movie that ships with MATLAB.
movieFullFileName = 'C:\Program Files\MATLAB\R2010a\toolbox\images
\imdemos\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
mov = aviread(movieFullFileName);
% movie(mov);
% Determine how many frames there are.
numberOfFrames = size(mov, 2);
numberOfFramesWritten = 0;
% Prepare a figure to show the images in the upper half of the
screen.
figure;
screenSize = get(0, 'ScreenSize');
newWindowPosition = [1 screenSize(4)/2 - 70 screenSize(3)
screenSize(4)/2];
set(gcf, 'Position', newWindowPosition); % Maximize figure.
% set(gcf, 'Position', get(0,'Screensize')); % Maximize figure.

% Ask user if they want to write the individual frames out to
disk.
promptMessage = sprintf('Do you want to save the individual frames
out to individual disk files?');
button = questdlg(promptMessage, 'Save individual frames?', 'Yes',
'No', 'Yes');
if strcmp(button, 'Yes')
writeToDisk = true;

% Extract out the various parts of the filename.
[folder, baseFileName, extentions, version] =
fileparts(movieFullFileName);
% Make up a special new output subfolder for all the separate
% movie frames that we're going to extract and save to disk.
% (Don't worry - windows can handle forward slashes in the
folder name.)
folder = pwd; % Make it a subfolder of the folder where this
m-file lives.
outputFolder = sprintf('%s/Movie Frames from %s', folder,
baseFileName);
% Create the folder if it doesn't exist already.
if ~exist(outputFolder, 'dir')
mkdir(outputFolder);
end
else
writeToDisk = false;
end

% 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.
thisFrame = mov(frame).cdata;

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

% Write the image array to the output file, if requested.
if writeToDisk
% Construct an output image file name.
outputBaseFileName = sprintf('Frame %4.4d.png', frame);
outputFullFileName = fullfile(outputFolder,
outputBaseFileName);

% Stamp the name and frame number onto the image.
% At this point it's just going into the overlay,
% not actually getting written into the pixel values.
text(5, 15, outputBaseFileName, 'FontSize', 20);

% Extract the image with the text "burned into" it.
frameWithText = getframe(gca);
% frameWithText.cdata is the image with the text
% actually written into the pixel values.
% Write it out to disk.
imwrite(frameWithText.cdata, outputFullFileName, 'png');
end

% 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(1,2,2);
hold off;
plot(meanGrayLevels, 'k-', 'LineWidth', 2);
hold on;
plot(meanRedLevels, 'r-');
plot(meanGreenLevels, 'g-');
plot(meanBlueLevels, 'b-');

% 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.
if writeToDisk
progressIndication = sprintf('Wrote frame %4d of %d.', frame,
numberOfFrames);
else
progressIndication = sprintf('Processed frame %4d of %d.',
frame, numberOfFrames);
end
disp(progressIndication);
% Increment frame count (should eventually = numberOfFrames
% unless an error happens).
numberOfFramesWritten = numberOfFramesWritten + 1;
end

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

% Exit if they didn't write any individual frames out to disk.
if ~writeToDisk
return;
end

% Ask user if they want to read the individual frames from the
disk,
% that they just wrote out, back into a movie and display it.
promptMessage = sprintf('Do you want to recall the individual
frames\nback from disk into a movie?\n(This will take several
seconds.)');
button = questdlg(promptMessage, 'Recall Movie?', 'Yes', 'No',
'Yes');
if strcmp(button, 'No')
return;
end

% Read the frame back in, and convert them to a movie.
% I don't know of any way to preallocate recalledMovie.
for frame = 1 : numberOfFrames
% Construct an output image file name.
outputBaseFileName = sprintf('Frame %4.4d.png', frame);
outputFullFileName = fullfile(outputFolder,
outputBaseFileName);
% Read the image in from disk.
thisFrame = imread(outputFullFileName);
% Convert the image into a "movie frame" structure.
recalledMovie(frame) = im2frame(thisFrame);
end
% Get rid of old image and plot.
delete(hImage);
delete(hPlot);
% Create new axes for our movie.
subPlot(1, 3, 2);
axis off; % Turn off axes numbers.
title('Movie recalled from disk', 'FontSize', fontSize);
% Play the movie in the axes.
movie(recalledMovie);
% Note: if you want to display graphics or text in the overlay
% as the movie plays back then you need to do it like I did at
first
% (at the top of this file where you extract and imshow a frame at
a time.)
msgbox('Done with this demo!');

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);
msgboxw(strErrorMessage);
end

From: Michael on
Does this do what you want?

numI=num2str(i);
numK=num2str(k);
imwrite(Vid(i).cdata,['c:\mydir' numK '\' numI '.jpeg'])

"Kaoutar " <azimane_k(a)hotmail.com> wrote in message <i3kj1b$600$1(a)fred.mathworks.com>...
> hello,
> I am working on a dataset of movies, and each set contains 9 videos, so i am willing to save the frames of each video in a separate folder, can anyone help me on that?? I would be very greatful. bellow is the code I am using, but this help only to save the frames of first video of the set into 'jpg' files, but i need to locate them into a folder (i). for example I have (i) videos and I would like to save the frames of video (i) in folder (i).
> Hoping to hear from you!!
> Thank you in advance!!
> Kaoutar
>
> addpath(genpath('C:\Users\kaoutar\Desktop\Motion'));
> jacking=dir('jack'); % Contains 9 videos
> no_files_bend = size(jacking,1);
>
> for k=3:length(jacking)
> jack =jacking(k).name;
> Vid = aviread(jack,1:10);
> for i=1:length(Vid)
> imwrite(Vid(i).cdata,[num2str(i) '.jpeg'])
> end
> end
From: Kaoutar on
"Michael " <verm25(a)hotmail.com> wrote in message <i3l4ah$n0s$1(a)fred.mathworks.com>...
> Does this do what you want?
>
> numI=num2str(i);
> numK=num2str(k);
> imwrite(Vid(i).cdata,['c:\mydir' numK '\' numI '.jpeg'])
>
> "Kaoutar " <azimane_k(a)hotmail.com> wrote in message <i3kj1b$600$1(a)fred.mathworks.com>...
> > hello,
> > I am working on a dataset of movies, and each set contains 9 videos, so i am willing to save the frames of each video in a separate folder, can anyone help me on that?? I would be very greatful. bellow is the code I am using, but this help only to save the frames of first video of the set into 'jpg' files, but i need to locate them into a folder (i). for example I have (i) videos and I would like to save the frames of video (i) in folder (i).
> > Hoping to hear from you!!
> > Thank you in advance!!
> > Kaoutar
> >
> > addpath(genpath('C:\Users\kaoutar\Desktop\Motion'));
> > jacking=dir('jack'); % Contains 9 videos
> > no_files_bend = size(jacking,1);
> >
> > for k=3:length(jacking)
> > jack =jacking(k).name;
> > Vid = aviread(jack,1:10);
> > for i=1:length(Vid)
> > imwrite(Vid(i).cdata,[num2str(i) '.jpeg'])
> > end
> > end

Thanks a lot Michael !! it works very well !!
Kind regards,

Kaoutar.
From: ImageAnalyst on
On Aug 8, 5:18 am, "Kaoutar " <aziman...(a)hotmail.com> wrote:
> Thanks a lot Michael !! it works very well !!
> Kind regards,
>
> Kaoutar.
---------------------------------------------------------------------------------------
I'm missing how that "save the frames of each video in a separate
folder" like you asked. My demo does do what you asked, but the
solution you say worked saves ALL videos in the SAME c:\mydir folder.
To change it you'd have to manually type in a new folder name -- my
solution comes up with a "separate folder" (like you asked)
automatically.
Wondering if you even ran my demo....
ImageAnalyst