frames extraction from a video
1 view (last 30 days)
Show older comments
hey
I have written a code to extract frames of two different cropped ares from a video and to evaluate intensity of cropped areas separately as below but I am getting error saying CL=S.BL(reference field is non existance) please help me fix this
% The code is process the candle images
clear;
close all;
clc;
%% Loading video of candle flickering
A = VideoReader('Augtencm.mp4');
nf = A.NumFrames;
if nf<200
B = read(A);
else
part = floor(nf/200);
for ii = 1:part
ii
B = read(A,[(ii-1)*200+1 (ii-1)*200+200]);
%eval(['B_' num2str(ii) '= read(A,[(ii-1)*200+1 (ii-1)*200+200]);']);
BL = B(280:620,235:445,:,:);
BR = B(50:620,720:850,:,:); % Comment and save the total frame for 1 or 2 parts first
filename = ['Augtencm' num2str(ii) '.mat'];
save(filename, 'B', '-v7.3');
end
end
%C = B(:,:,:,:); %Height, Width, Color Plane, Frame Number, where Color Plane is in the order Red, Green, Blue
%save('C0034.mat', 'C', '-v7.3'); % Saving as 4D matrix for future use.
%% loading the matfile
S = load('Augtencm1.mat');
CL = S.BL;
CR = S.BR;
%% Showing frames
for t = 1:200
t
imshow(B(280:620,235:445,:,t));
imshow(B(50:620,720:850,:,t)); % modify by trial and error to retain the exact flame zone
pause(0.1)
end
%% Cropping the matrix and calculating
part=4;
for ii = 1:part
ii
filename = ['Augtencm1' num2str(ii) '.mat'];
S = load(filename);
CL = S.BL;
CR = S.BR;
%C2 = C(70:650,900:1220,:,:);
[h,w,c,t] = size(CR);
for i = 1:t
cr = CR(:,:,:,i);
cl = CL(:,:,:,i);
cr = cr(:,:,:);
cl = cl(:,:,:);
ccr = rgb2gray(cr);
ccl = rgb2gray(cl);
sr((ii-1)*200+i) = sum(sum(ccr))/(h*w);
sl((ii-1)*200+i) = sum(sum(ccl))/(h*w); % area average intensity
end
end
%% plotting intensity time series
fps = 240; % this should be actual fps of recording
t = part*200;
T = 1/fps:1/fps:t/fps;
figure(1)
plot(T,sr);
plot(T,sl);
set(gca,'linewidth',1,'fontsize',12); %xlim([0 10000]); %ylim([-2 2]);
xlabel('Time (s)')
ylabel('Intensity (a.u.)')
%savefig('Augtencm.fig')
%%
0 Comments
Answers (1)
Image Analyst
on 24 Aug 2020
Leave the semicolon off and put S on a line:
S = load(filename)
S
fieldnames(S)
What do you see in the command window? Chances are you will not see a field called BL. Attach your mat file if you need more help.
3 Comments
Image Analyst
on 25 Aug 2020
Well there you go. There is no such field. Why do you think there should be? By the way, when I said "what do you see" I meant for you to share it with me by copying and pasting back here.
If you want to create a new field called BL, you can attach one so S simply by assigning it:
S.BL = 42; % or whatever you want it to be.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!