Como escribir sobre una imagen?
Publicado por Minoru Hono (1 intervención) el 23/06/2013 03:27:21
Hola a todos, no tengo mucha experiencia en matlab, pero con lo poco que sé logre hacer un pequeño programa para escribir sobre una foto, este tiene la opcion de elegir tipo de letra y color, es muy fácil de aplicar, puesto que utilice el comando 'gtext'...
El problema que se me genera es que debo guardar la imagen en una variable/matriz con lo que se escribio sobre esta, ya que despues debo aplicar otros procesos (entre ellos agregar objetos sobre la imagen, por ej: una estrella, aprovecho de decirlo por si alguien sabe como realizarlo pues tengo algunos problemas con el código), para luego guardarla, enviarla,imprimirla, ect.
Sé que se puede guardar cuando se habre la ventana, pero la idea es que sea automatico...
a continuación dejo el código resumido, ya que es muy largo para ponerlo completo:
%previamente la imagen ingresada
imshow(foto);
axis('image');
disp('ingrese el texto que desea y luego indique donde poner') ;
texto=input('Ingrese palabra: ','s');
hold on
disp('color del texto')
disp('1.rojo')
disp('2.amarillo')
e=1;
e1=1;
while e==1
opcion=input('ingrese opcion:');
if opcion==1
disp('tipo de letra')
disp('1.algerian')
disp('2.script')
while e1==1
x=input('ingrese opcion:');
if x==1
a=gtext(texto,'color','r');
set(a, 'FontName', 'Algerian', 'FontWeight', 'bold', 'FontSize', 18);
e1=0;
elseif x==2
a=gtext(texto,'color','r');
set(a, 'FontName', 'Script', 'FontWeight', 'bold', 'FontSize', 18);
e1=0;
else
e1=1;
end
end
e=0;
elseif opcion==2
disp('tipo de letra')
disp('1.algerian')
disp('2.script')
while e1==1
x=input('ingrese opcion:');
if x==1
a=gtext(texto,'color','y');
set(a, 'FontName', 'Algerian', 'FontWeight', 'bold', 'FontSize', 18);
e1=0;
elseif x==2
a=gtext(texto,'color','y');
set(a, 'FontName', 'Script', 'FontWeight', 'bold', 'FontSize', 18);
e1=0;
else
e1=1;
end
end
e=0;
else
e=1;%vuelve a preguntar si se ingresa un numero que no esta en las opciones
end
end
hold off
El problema que tengo para agregar el objeto es al posicionarlo en la imagen (no lo deja donde indico), este es parte del código que implemente (imagen en rgb):
% m1= imagen del objeto im=imagen donde se agrega el objeto
% tamaño de m1 55x55....menor que el tamaño de im
gris=rgb2gray(m1);
bin=gris<=128;
bw=bwlabel(bin,8);
n=1; % n= cantidad de objetos a poner
disp('elija la posicion donde quiere el objeto')
imshow(im);
[x1 y1]=ginput(n);
% x1 e y1 es el punto donde irá el centro del objeto
centro=ceil(55/2);
for n1=1:55
for n2=1:55
pixbin=bw(n1,n2);
pixm1=m1(n1,n2,1);
pixm2=m1(n1,n2,2);
pixm3=m1(n1,n2,3);
pix1=im(x1+n1-centro,y1+n2-centro,1);
pix2=im(x1+n1-centro,y1+n2-centro,2);
pix3=im(x1+n1-centro,y1+n2-centro,3);
if pixbin==1
im(x1+n1-centro,y1+n2-centro,1)=pixm1;
im(x1+n1-centro,y1+n2-centro,2)=pixm2;
im(x1+n1-centro,y1+n2-centro,3)=pixm3;
else
im(x1+n1-centro,y1+n2-centro,1)= pix1;
im(x1+n1-centro,y1+n2-centro,2)= pix2;
im(x1+n1-centro,y1+n2-centro,3)= pix3;
end
end
end
imshow(im);
Espero que me puedan responder...
De antemano muchas gracias!!
El problema que se me genera es que debo guardar la imagen en una variable/matriz con lo que se escribio sobre esta, ya que despues debo aplicar otros procesos (entre ellos agregar objetos sobre la imagen, por ej: una estrella, aprovecho de decirlo por si alguien sabe como realizarlo pues tengo algunos problemas con el código), para luego guardarla, enviarla,imprimirla, ect.
Sé que se puede guardar cuando se habre la ventana, pero la idea es que sea automatico...
a continuación dejo el código resumido, ya que es muy largo para ponerlo completo:
%previamente la imagen ingresada
imshow(foto);
axis('image');
disp('ingrese el texto que desea y luego indique donde poner') ;
texto=input('Ingrese palabra: ','s');
hold on
disp('color del texto')
disp('1.rojo')
disp('2.amarillo')
e=1;
e1=1;
while e==1
opcion=input('ingrese opcion:');
if opcion==1
disp('tipo de letra')
disp('1.algerian')
disp('2.script')
while e1==1
x=input('ingrese opcion:');
if x==1
a=gtext(texto,'color','r');
set(a, 'FontName', 'Algerian', 'FontWeight', 'bold', 'FontSize', 18);
e1=0;
elseif x==2
a=gtext(texto,'color','r');
set(a, 'FontName', 'Script', 'FontWeight', 'bold', 'FontSize', 18);
e1=0;
else
e1=1;
end
end
e=0;
elseif opcion==2
disp('tipo de letra')
disp('1.algerian')
disp('2.script')
while e1==1
x=input('ingrese opcion:');
if x==1
a=gtext(texto,'color','y');
set(a, 'FontName', 'Algerian', 'FontWeight', 'bold', 'FontSize', 18);
e1=0;
elseif x==2
a=gtext(texto,'color','y');
set(a, 'FontName', 'Script', 'FontWeight', 'bold', 'FontSize', 18);
e1=0;
else
e1=1;
end
end
e=0;
else
e=1;%vuelve a preguntar si se ingresa un numero que no esta en las opciones
end
end
hold off
El problema que tengo para agregar el objeto es al posicionarlo en la imagen (no lo deja donde indico), este es parte del código que implemente (imagen en rgb):
% m1= imagen del objeto im=imagen donde se agrega el objeto
% tamaño de m1 55x55....menor que el tamaño de im
gris=rgb2gray(m1);
bin=gris<=128;
bw=bwlabel(bin,8);
n=1; % n= cantidad de objetos a poner
disp('elija la posicion donde quiere el objeto')
imshow(im);
[x1 y1]=ginput(n);
% x1 e y1 es el punto donde irá el centro del objeto
centro=ceil(55/2);
for n1=1:55
for n2=1:55
pixbin=bw(n1,n2);
pixm1=m1(n1,n2,1);
pixm2=m1(n1,n2,2);
pixm3=m1(n1,n2,3);
pix1=im(x1+n1-centro,y1+n2-centro,1);
pix2=im(x1+n1-centro,y1+n2-centro,2);
pix3=im(x1+n1-centro,y1+n2-centro,3);
if pixbin==1
im(x1+n1-centro,y1+n2-centro,1)=pixm1;
im(x1+n1-centro,y1+n2-centro,2)=pixm2;
im(x1+n1-centro,y1+n2-centro,3)=pixm3;
else
im(x1+n1-centro,y1+n2-centro,1)= pix1;
im(x1+n1-centro,y1+n2-centro,2)= pix2;
im(x1+n1-centro,y1+n2-centro,3)= pix3;
end
end
end
imshow(im);
Espero que me puedan responder...
De antemano muchas gracias!!
Valora esta pregunta
0