Error by creating video from images

1 visualización (últimos 30 días)
Serhii Tetora
Serhii Tetora el 8 de Sept. de 2020
Comentada: Serhii Tetora el 13 de Sept. de 2020
I'm creating images from a data in parfor-loop. Then i want to create a video from this images, but have some error. I don't understand, why the frame sizes are not equal. In first case (line 110) is all rigth, but in the second case some images have different sizes. Thanks in advance for your help!
clear; close all;clc
bilder.p_c = 1; % Druck
Limschalter = 1;
MakeVideo = 1;
% Bildereinstellungen
im.width=9; % Bildbreite [cm]
im.height=6; % Bildhöhe [cm]
im.cmapclass = 60; % Zahl von Farben in colorbar % früher 10
im.cmap = 'jet';
im.res = 600; % dpi
TeilungCB=5;
% globale Schriftart
font.name = 'Arial';font.size = 9;
%% FB-Einstellungen - wichtig!!!
maxLS = 20; % Anzahl der Lastschritten
start = 4; % Anfangsschritt
endstep = maxLS+4; % Endschritt
%% Voraussetzung der Limits
% Limits für Innenring
X_IR_limits = nan(1,2); Y_IR_limits = nan(1,2);
pc_lim_IR = nan(1,2);
% Limits für Aussenring
X_AR_limits = nan(1,2); Y_AR_limits = nan(1,2);
pc_lim_AR = nan(1,2);
%%
folder = '.\Sim_80';
im.folder = '\export_bilder_farbe';
load('data.mat')
%% Temporary limits
% Limits für Innenring
X_IR_lim_tmp = roundn([min(xData_IR(:,:,start:end),[],'all') max(xData_IR(:))],-2);
Y_IR_lim_tmp = roundn([min(yData_IR(:,:,start:end),[],'all') max(yData_IR(:))],-2);
pc_lim_IR_tmp = [0 max(p_c_IR,[],'all')];
% Limits für Aussenring
X_AR_lim_tmp = roundn([min(xData_AR(:,:,start:end),[],'all') max(xData_AR(:))],-2);
Y_AR_lim_tmp = roundn([min(yData_AR(:,:,start:end),[],'all') max(yData_AR(:))],-2);
pc_lim_AR_tmp = [0 max(p_c_AR,[],'all')];
%% Global limits
% Limits für Innenring
Y_IR_limits = [min(Y_IR_lim_tmp(1),Y_IR_limits(1)) max(Y_IR_lim_tmp(2),Y_IR_limits(2))];
X_IR_limits = [8.8 11];
pc_lim_IR = [0 max(pc_lim_IR_tmp(2),pc_lim_IR(2))];
% Limits für Aussenring
Y_AR_limits = [min(Y_AR_lim_tmp(1),Y_AR_limits(1)) max(Y_AR_lim_tmp(2),Y_AR_limits(2))];
X_AR_limits = [4.3 5.9];
pc_lim_AR = [0 max(pc_lim_AR_tmp(2),pc_lim_AR(2))];
%% Clearing von Variablen
clear var xData_IR yData_IR p_c_IR xData_AR yData_AR p_c_AR
%% LimIR = LimAR
if Limschalter
pc_lim_IR = [0 max(pc_lim_IR(2),pc_lim_AR(2))];
pc_lim_AR = pc_lim_IR;
end
%% Zeichenbereiche erzeugen
% Create figures
hfig_IR = figure('PaperUnits','centimeters','PaperSize',[im.width im.height],...
'PaperPosition',[0 0 im.width im.height],'Units','centimeters',...
'Position',[2 15 im.width im.height],'NumberTitle','off',...
'name','Innenring','NextPlot','replacechildren',...
'color', [1 1 1],'menubar','none');
hfig_AR = figure('PaperUnits','centimeters','PaperSize',[im.width im.height],...
'PaperPosition',[0 0 im.width im.height],'Units','centimeters',...
'Position',[2 2 im.width im.height],'NumberTitle','off',...
'name','Aussenring','NextPlot','replacechildren',...
'color', [1 1 1],'menubar','none');
% Set outer bounds
set(hfig_IR, 'OuterPosition',[2 15 im.width im.height])
set(hfig_AR, 'OuterPosition',[2 2 im.width im.height])
% Create axes
hax_AR = axes('Fontname',font.name,'parent',hfig_AR,...
'Units', 'normalized', 'OuterPosition', [.01 .01 .99 .99],...
'NextPlot','replacechildren','Box','on');
hax_IR = axes('Fontname',font.name,'parent',hfig_IR,...
'Units', 'normalized', 'OuterPosition', [.01 .01 .99 .99],...
'NextPlot','replacechildren','Box','on');
pathV = [folder,'\export_video'];
load('data.mat')
%% Löschen von unbenutzten Dateien
clear var X_IR_limits_tmp Y_IR_limits_tmp pc_lim_IR_tmp...
X_AR_limits_tmp Y_AR_limits_tmp pc_lim_AR_tmp
%% p_c - Kontaktdrück
if bilder.p_c
CBarTickIR = linspace(pc_lim_IR(1),pc_lim_IR(2),TeilungCB);
CBarTickAR = linspace(pc_lim_AR(1),pc_lim_AR(2),TeilungCB);
cla(hax_IR);cla(hax_AR)
parfor k = start:endstep
MakePic_pc('p_c',1,xData_IR,yData_IR,p_c_IR,pc_lim_IR,CBarTickIR,X_IR_limits,Y_IR_limits,LS_IR,SS_IR,k,font,folder,im,hfig_IR,hax_IR)
MakePic_pc('p_c',2,xData_AR,yData_AR,p_c_AR,pc_lim_AR,CBarTickAR,X_AR_limits,Y_AR_limits,LS_AR,SS_AR,k,font,folder,im,hfig_AR,hax_AR)
end
if MakeVideo
appendix='\p_c';
pathB = [folder im.folder appendix];
create_video(pathB,pathV,appendix,'AR');
create_video(pathB,pathV,appendix,'IR');
end
end
function MakePic_pc(Valuename,flagR,xData,yData,value,value_lim,CBarTick,X_limits,Y_limits,LS,SS,k,font,folder,im,hfig,hax)
if flagR == 1
Ring = 'Innenring';
ring = 'IR';
elseif flagR == 2
Ring = 'Aussenring';
ring = 'AR';
end
fprintf('[%s %s] LS_%s SS_%s\n',Valuename,Ring,LS{k},SS{k});
figure(hfig);
contourf(xData(:,:,k),yData(:,:,k),value(:,:,k),im.cmapclass,'EdgeColor','none','Parent',hax);
colormap(jet);
caxis(value_lim);
haxes_cb=colorbar(hax,'Ylim',value_lim,'Location','northoutside');
haxes_cb.Label.String = 'Kontaktpressung p_c [MPa]';
haxes_cb.Label.FontName = font.name;
haxes_cb.Label.FontSize = font.size;
set(haxes_cb,'Ytick',CBarTick,'YTickLabel',round(CBarTick));
set(hax,'XLim',X_limits,'YLim',roundn(Y_limits,-2));
hax.XTick = roundn(linspace(X_limits(1),X_limits(2),6),-1);
hax.YTick = roundn([linspace(Y_limits(1),0,3) linspace(Y_limits(2)/2,Y_limits(2),2)],-2);
text(0.99,0.01,sprintf('p_{c,max}=%dMPa',round(max(value,[],'all'))),'Units','normalized',...
'Fontname',font.name,'Fontsize',font.size-1,'HorizontalAlignment','right',...
'VerticalAlignment','bottom','BackgroundColor','w','Margin',0.01,'Parent',hax)
set(hax,'color', [1 1 1],'Fontname',font.name,'Fontsize',font.size,...
'PlotBoxAspectRatio',[1 1 1],'DataAspectRatio',[1 1 1]);
im_folderB=sprintf('%s/%s',im.folder,Valuename);
if(~isfolder(strcat(folder,im_folderB)))
mkdir(strcat(folder,im_folderB));
end
exportgraphics(hfig,sprintf('%s/%s/%s__%03i_%s__LS%s_SS%s.png',folder,im_folderB,ring,k,Valuename,LS{k},SS{k}),'Resolution',im.res)
end
function create_video(pathB,pathV,appendix,ring)
if(~isfolder([pathV,appendix]))
mkdir([pathV,appendix]);
end
images = dir(fullfile(pathB,[ring,'*.png']));
video = VideoWriter(fullfile(pathV,appendix,[appendix,'_',ring]),'Motion JPEG AVI');
video.Quality = 100;
video.FrameRate = 5;
open(video);
for ii=1:length(images)
I = imread(fullfile(pathB,images(ii).name));
writeVideo(video,I);
end
close(video);
end
Error using VideoWriter/writeVideo (line 368)
Frame must be 1829 by 1125
Error in code>create_video (line 169)
writeVideo(video,I);
Error in code (line 111)
create_video(pathB,pathV,appendix,'IR');
  1 comentario
Serhii Tetora
Serhii Tetora el 11 de Sept. de 2020
I made this code shorter
clear; close all;clc
load('data_1.mat')
pathV = [folder,'\export_video'];
%% Create figures
hfig_IR = figure('PaperUnits','centimeters','PaperSize',[im.width im.height],...
'PaperPosition',[0 0 im.width im.height],'Units','centimeters',...
'Position',[2 15 im.width im.height],'NumberTitle','off',...
'name','Innenring','NextPlot','replacechildren',...
'color', [1 1 1],'menubar','none');
hfig_AR = figure('PaperUnits','centimeters','PaperSize',[im.width im.height],...
'PaperPosition',[0 0 im.width im.height],'Units','centimeters',...
'Position',[2 2 im.width im.height],'NumberTitle','off',...
'name','Aussenring','NextPlot','replacechildren',...
'color', [1 1 1],'menubar','none');
% Set outer bounds
set(hfig_IR, 'OuterPosition',[2 15 im.width im.height])
set(hfig_AR, 'OuterPosition',[2 2 im.width im.height])
% Create axes
hax_AR = axes('Fontname',font.name,'parent',hfig_AR,...
'Units', 'normalized', 'OuterPosition', [.01 .01 .99 .99],...
'NextPlot','replacechildren','Box','on');
hax_IR = axes('Fontname',font.name,'parent',hfig_IR,...
'Units', 'normalized', 'OuterPosition', [.01 .01 .99 .99],...
'NextPlot','replacechildren','Box','on');
%% p_c - Kontaktdrück
if bilder.p_c
CBarTickIR = linspace(pc_lim_IR(1),pc_lim_IR(2),TeilungCB);
CBarTickAR = linspace(pc_lim_AR(1),pc_lim_AR(2),TeilungCB);
cla(hax_IR);cla(hax_AR)
parfor k = start:endstep
MakePic_pc('p_c',1,xData_IR,yData_IR,p_c_IR,pc_lim_IR,CBarTickIR,X_IR_limits,Y_IR_limits,LS_IR,SS_IR,k,font,folder,im,hfig_IR,hax_IR)
MakePic_pc('p_c',2,xData_AR,yData_AR,p_c_AR,pc_lim_AR,CBarTickAR,X_AR_limits,Y_AR_limits,LS_AR,SS_AR,k,font,folder,im,hfig_AR,hax_AR)
end
if MakeVideo
appendix='\p_c';
pathB = [folder im.folder appendix];
create_video(pathB,pathV,appendix,'AR');
create_video(pathB,pathV,appendix,'IR');
end
end
function MakePic_pc(Valuename,flagR,xData,yData,value,value_lim,CBarTick,X_limits,Y_limits,LS,SS,k,font,folder,im,hfig,hax)
if flagR == 1
Ring = 'Innenring';
ring = 'IR';
elseif flagR == 2
Ring = 'Aussenring';
ring = 'AR';
end
fprintf('[%s %s] LS_%s SS_%s\n',Valuename,Ring,LS{k},SS{k});
figure(hfig);
contourf(xData(:,:,k),yData(:,:,k),value(:,:,k),im.cmapclass,'EdgeColor','none','Parent',hax);
colormap(jet);
caxis(value_lim);
haxes_cb=colorbar(hax,'Ylim',value_lim,'Location','northoutside');
haxes_cb.Label.String = 'Kontaktpressung p_c [MPa]';
haxes_cb.Label.FontName = font.name;
haxes_cb.Label.FontSize = font.size;
set(haxes_cb,'Ytick',CBarTick,'YTickLabel',round(CBarTick));
set(hax,'XLim',X_limits,'YLim',roundn(Y_limits,-2));
hax.XTick = roundn(linspace(X_limits(1),X_limits(2),6),-1);
hax.YTick = roundn([linspace(Y_limits(1),0,3) linspace(Y_limits(2)/2,Y_limits(2),2)],-2);
text(0.99,0.01,sprintf('p_{c,max}=%dMPa',round(max(value,[],'all'))),'Units','normalized',...
'Fontname',font.name,'Fontsize',font.size-1,'HorizontalAlignment','right',...
'VerticalAlignment','bottom','BackgroundColor','w','Margin',0.01,'Parent',hax)
set(hax,'color', [1 1 1],'Fontname',font.name,'Fontsize',font.size,...
'PlotBoxAspectRatio',[1 1 1],'DataAspectRatio',[1 1 1]);
im_folderB=sprintf('%s/%s',im.folder,Valuename);
if(~isfolder(strcat(folder,im_folderB)))
mkdir(strcat(folder,im_folderB));
end
exportgraphics(hfig,sprintf('%s/%s/%s__%03i_%s__LS%s_SS%s.png',folder,im_folderB,ring,k,Valuename,LS{k},SS{k}),'Resolution',im.res)
end
function create_video(pathB,pathV,appendix,ring)
if(~isfolder([pathV,appendix]))
mkdir([pathV,appendix]);
end
images = dir(fullfile(pathB,[ring,'*.png']));
video = VideoWriter(fullfile(pathV,appendix,[appendix,'_',ring]),'Motion JPEG AVI');
video.Quality = 100;
video.FrameRate = 5;
open(video);
for ii=1:length(images)
I = imread(fullfile(pathB,images(ii).name));
writeVideo(video,I);
end
close(video);
end
Error using VideoWriter/writeVideo (line 368)
Frame must be 1829 by 1125
Error in code>create_video (line 103)
writeVideo(video,I);
Error in code (line 44)
create_video(pathB,pathV,appendix,'IR');

Iniciar sesión para comentar.

Respuestas (2)

ahcen aliouat
ahcen aliouat el 8 de Sept. de 2020
Hello, there is difficulties in reading you code because of the used language in the comments, however, have you tried to redefine the path , as below for exemple:
pathB = [folder im.folder appendix];
create_video(pathB,pathV,appendix,'AR');
pathC = [folder im.folder appendix];
create_video(pathC,pathV,appendix,'IR');
  2 comentarios
Serhii Tetora
Serhii Tetora el 9 de Sept. de 2020
It's the same. pathB is the path to images. They all are in same folder.
Serhii Tetora
Serhii Tetora el 11 de Sept. de 2020
Can you run this code?

Iniciar sesión para comentar.


Image Analyst
Image Analyst el 11 de Sept. de 2020
I think your axes must be changing size or shape so your image is not the same size. Try not specifying the 'Resolution' option. Or else, call imresize() when you add each image to make sure it's the same size as the first one.
  1 comentario
Serhii Tetora
Serhii Tetora el 13 de Sept. de 2020
But why it is changing size? I tried to plot for all steps in the loop on the same axes with same limits and same labels, title etc.

Iniciar sesión para comentar.

Categorías

Más información sobre Images en Help Center y File Exchange.

Productos


Versión

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by