Matlab - Guardar contenido de un axes en Matlab

 
Vista:

Guardar contenido de un axes en Matlab

Publicado por ana (25 intervenciones) el 24/11/2011 18:45:45
Hola a todos,

En mi gui quiero guardar el contenido de unos axes en formato jpg o en formato .fig.

1. En formato fig porque al volver a abrir la gui tengo que obtener la gráfica guardada y mostrarla en los axes de nuevo.

Por lo que he estado viendo para guardar en formato fig se hace lo siguiente:

h=figure;
copyobj(handles.axes1,h);
saveas(h,ruta);

Esto lo hace bien pero mi duda es que cuando quiera volver a recuperar la gráfica que contienen esos axes puedo hacer esto?

f=open(ruta);
copyobj(f,handles.axes1);

Supongo que no porque me da error. Alguién sabe como hacerlo o alguna idea alternativa.

2. También tengo que guardarlo en jpg y para ello hice lo siguiente:

imagen=getimage(handles.axes1);
imwrite(imagen,ruta);

y antes del imwrite compruebo que la imagen no esté vacía pero sí lo está, supongo que la gráfica no se considera una imagen. Entonces cómo puedo hacerlo??


Tengo bastantes dudas con esto y no consigo aclararme.

Gracias, agradecería mucho su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Guardar contenido de un axes en Matlab

Publicado por ana (25 intervenciones) el 27/11/2011 11:46:14
Voy a plantear la pregunta de una forma distinta porque quizás no me he explicado bien.

Cómo puedo copiar el contenido de un axes y guardarlo en el formato que quiera? y además una vez lo tenga guardado, cómo puedo mostrarlo en los axes?

Muchas Gracias y un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Guardar contenido de un axes en Matlab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 27/11/2011 16:10:50
Hola Ana.
En tu primera pregunta habia muchos vacios por eso he no habia contestado, haz vuelto preguntar algo refinado, pero sigue habiendo vacios en tu pregunta refinado.
La imagen que tienes en tu axes, es una imagene leida desde la pc o una imagen generado por la funcion graficadora de matlab que es plot, mesh, surf....?.

Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Profesor de Metodos Numericos con Matlab
PROGRAMADOR EN MATLAB
[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Guardar contenido de un axes en Matlab

Publicado por ana (25 intervenciones) el 29/11/2011 13:03:34
Hola Jose,

Lo siento tienes razón. Voy a intentar explicarlo con más detalle.

La imagen que tengo en el axes es un plot, muestro una gráfica de una señal capturada con micrófono.
Quiero guardar esa imagen en un formato en el que pueda volver a recuperar a través de mi programa y volver a mostrar en un axes.
Entonces al final lo que quiero es guardar el contenido del axes (plot) en dos formatos. Uno en jpg o similar y otro en un formato que matlab pueda leer y mostrar el contenido en el axes de nuevo.

Espero que esta vez esté más claro. Muchas gracias :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Guardar contenido de un axes en Matlab

Publicado por ana (25 intervenciones) el 02/12/2011 20:29:45
Hola,

Sigue sin entenderse , lo siento pero no sé cómo explicarlo mejor :(. Nadie sabe como podría guardar un plot para que pueda volver a cargar ese plot en un axes??

Agradezco muchísimo cualquier idea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Guardar contenido de un axes en Matlab

Publicado por ana (25 intervenciones) el 13/12/2011 10:40:03
Hola ,

Yo sigo intentándolo porque le he dado muchas vueltas y necesito encontrar una solución. Ahora mismo en un botón hago lo siguiente:

%guarda la gráfica actual
graficaTiempo = figure;
set(graficaTiempo,'Visible','off');
copyobj(handles.axesCaptura,graficaTiempo);
rutaGuardar=obtieneRutaGuardarRes(rutaMedidas,nombreCarpeta,'tiempo',nCuerda);
rutaGuardarFig=strcat(rutaGuardar,'.fig');
saveas(graficaTiempo,rutaGuardarFig);


Este código pasa el plot que tengo en el axesCaptura a una figura y lo guardo en una ruta determinada.
Supongo cierro el programa y cuando vuelvo a abrirlo voy a tener otro botón en el que quiero obtener esa figura guardada y que se vuelva a mostrar en el axes y esta es la parte que no consigo hacer.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Guardar contenido de un axes en Matlab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 14/12/2011 00:51:15
Hola Ana.
Al parecer quieres hacer, de esta manera.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
function varargout = guardar_figura_axis(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @guardar_figura_axis_OpeningFcn, ...
                   'gui_OutputFcn',  @guardar_figura_axis_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end
 
if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
 
function guardar_figura_axis_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
 
guidata(hObject, handles);
 
function varargout = guardar_figura_axis_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
 
function manualmente_Callback(hObject, eventdata, handles)
 
[nombre,ruta]=uigetfile('*.jpg','ABRIR IMAGEN');
if nombre==0
    return;
else
    a=imread([ruta nombre]);
    axes(handles.axes1);
    imshow(a);
end
 
function Automaticamente_Callback(hObject, eventdata, handles)
a=imread('musica.jpg');
axes(handles.axes2);
imshow(a);


POSDATA: la informacion que brindas sobre de como guardar una figura de un plot, es tan resumida que no he podido reproducirlo, es por ello que te mando solo la parte de abrir un archivo de figura y mostrarlo en un axes, he hecho de dos maneras, uno manualmente y el otro automaticamente, musica es un imagen q yo tengo, si deseas el codigo m y fig me escribes a mi correo y te lo paso.
Serias tan amable ponerle en el foro, o caso contrario enviarlo a mi correo la parte de tu codigo que sirve para guardar un plot . Para poder verlo.



Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Profesor de Metodos Numericos con Matlab
PROGRAMADOR EN MATLAB
[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Guardar contenido de un axes en Matlab

Publicado por ana (25 intervenciones) el 14/12/2011 21:29:11
Hola Jose,

Exactamente no es lo que quiero pero he hecho una gui de prueba con 4 botones y dos axes.
En los 2 primeros intento copiar el plot del axes principal como formato jpg.
En los otros 2 hago lo mismo pero como formato .fig.
En el código comento lo que va mal y me gustaría encontrar la solución en ambos casos.

Gracias.

Aquí está el código


function varargout = guiPrueba(varargin)
% GUIPRUEBA M-file for guiPrueba.fig
% GUIPRUEBA, by itself, creates a new GUIPRUEBA or raises the existing
% singleton*.
%
% H = GUIPRUEBA returns the handle to a new GUIPRUEBA or the handle to
% the existing singleton*.
%
% GUIPRUEBA('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in GUIPRUEBA.M with the given input arguments.
%
% GUIPRUEBA('Property','Value',...) creates a new GUIPRUEBA or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before guiPrueba_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to guiPrueba_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help guiPrueba

% Last Modified by GUIDE v2.5 14-Dec-2011 21:09:01

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @guiPrueba_OpeningFcn, ...
'gui_OutputFcn', @guiPrueba_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before guiPrueba is made visible.
function guiPrueba_OpeningFcn(hObject, eventdata, handles, varargin)


% Choose default command line output for guiPrueba
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes guiPrueba wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = guiPrueba_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

x=-6*pi:pi/20:6*pi;
axes(handles.axes1);
plot(x,sin(x));

% --- Botón Guardar
function pushbutton1_Callback(hObject, eventdata, handles)
% Guardar imagen
rgb = getimage(handles.axes1);
if isempty(rgb) %Es vacío porque supongo no lo considera una imagen, por lo tanto no llega a guardar el plot como imagen
disp('no hay imagen');
return;
end
% Guardar archivo
formatos = {'*.jpg','JPEG (*.jpg)';'*.tif','TIFF (*.tif)'};
[nomb,ruta] = uiputfile(formatos,'GUARDAR IMAGEN');
if nomb==0, return, end
fName = fullfile(ruta,nomb);
imwrite(rgb,fName);

% --- Botón obtener imagen
function pushbutton2_Callback(hObject, eventdata, handles)
[nomb,ruta] = uigetfile('*.jpg','Elegir IMAGEN');
if isequal(nomb,0) || isequal(ruta,0)
return;
end
a=imread([ruta nomb]);
set(handles.axes2,'Visible','on');
axes(handles.axes2);
imshow(a);




% --- Guarda el plot en una figura.
function pushbutton3_Callback(hObject, eventdata, handles)
%Crea una figura
graficaTiempo = figure;
%No muestro figura
set(graficaTiempo,'Visible','off');
%copia el contenido del axes1 en la figura
copyobj(handles.axes1,graficaTiempo);
%Elige ruta para guardar la figura
formatos = {'*.fig','Fig (*.fig)'};
[nomb,ruta] = uiputfile(formatos,'GUARDA FIGURA');
if isequal(nomb,0) || isequal(ruta,0)
return;
end
rutaCompleta=fullfile(ruta,nomb);
%Guarda la figura en la ruta
saveas(graficaTiempo,rutaCompleta);


% --- Obtiene la figura guardada e intenta mostrarla de nuevo en el axes.
function pushbutton4_Callback(hObject, eventdata, handles)
%Esta es la parte que no me funciona porque no sé como hacerlo pero por
%lógica he supuesto que sería algo así.

%Obtengo ruta de la figura guardada
[nomb,ruta] = uigetfile('*.fig','Elegir figura');
if isequal(nomb,0) || isequal(ruta,0)
return;
end
rutaCompleta=fullfile(ruta,nomb);
%abre figura
f=open(rutaCompleta);
%el error está en este comando que intenta copiar el contenido de la figura
%a un axes
copyobj(f,handles.axes2);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Guardar contenido de un axes en Matlab

Publicado por lorena (1 intervención) el 09/01/2014 19:06:54
hola Jose,

Mi duda está relacionada con las explicaciones que estais dando aquí, pero no sé cómo resolverlo:

Mi código es muy muy simple:

plot(sin(x));

solo quiero guardar el contenido del plot (es decir, el dibujo del seno) como una imagen jpeg para poder leerla después con IMSHOW y tratar ese dibujo pixel a pixel.

gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Guardar contenido de un axes en Matlab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 10/01/2014 03:38:03
Evita usar el termino simple cuando hagas tus preguntas en el foro. Recuerda que ese de simple es relativo.


Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]


http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Guardar contenido de un axes en Matlab

Publicado por Andrés Cristancho (4 intervenciones) el 18/08/2015 23:24:06
Buenas tardes

Tengo una GUI con un 'axis' y un 'pussbotton' llamado SIGUIENTE. Necesito mostrar 10 fotos en el axis, de manera que al presionar SIGUIENTE vayan pasando las fotos una por una.

¿Como puedo hacer esto?

Agradezco me puedan ayudar.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar