Matlab - Pintar lineas en una imagen
Buenas tengo una dudilla, a ver si alguien me la puede resolver. Estoy haciendo un programilla en matlab para una practica. En ella se me pide que lea una imagen y la muestre en pantalla. Después, el usuario tiene que meter dos puntos (cada uno con una posicíon x e y) de dicha imagen y enmarcar el espacio comprendido en ellos, es decir, crear un cuadrado alrededor de ellos (será un rectángulo o un cuadrado). Todo ello sin que la imagen de fondo se vaya, es decir, como si hiciéra una selección y se mostrara el cuadrado en el área seleccionada. Lo de mostrar la imagen y conseguir los puntos lo tengo ya, lo que querría saber es si habría algun método para en marcar el espacio comprendido entre esos puntos o tirar líneas de uno a otro hasta conseguir un cuadrado/rectángulo, etc. Además de esto, ya aprovecho para preguntar si habría algún método para añadir una etiqueta en cualquier lugar de una imagen ya mostrada sin que esta se elimine. Muchas gracias, un saludo!! También te puede interesar...
HOLA LAURA. Bueno hice un programa a lo que estas pidiendo en el foro. Puedes utilizar cualquier foto foto jpg. Cada linea esta con explicacion, porque nose tu nivel de conocimientos de MATLAB. Cuandos ejecutes, al final lleva el mouse hacia la figura y te saldra una cruz, entonces ubica la cruz en el lugar que deseas y haces click derecho. Claro que el programa se puede hacaer más genérico, es decir leer las coordenas por teclado, por el memento esta hecho para dos coordenadas fijas. Si hay dudas vuelves a escribir en el foro. % OBSERVACIONES: % TANTO LA foto.jpg y el archivo en matlab deben estar en el mismo % directorio, para que se pueda ejecutar. clear, %borra variables de la memoria de matlab clc, %limpia la ventana de comandos close all % cierra todas las graficas abiertas figure(gcf) % para q salte la figura al primer plano fotos=imread('fotos.jpg'); % imread para leer fotos image(fotos); % image para que visualice la foto axis('image'); % para q visualice sin deformacion la foto V=axis % V=[xmin,xmax, ymin, y max] dimensiones de la foto P1=[180,60]; % P1=(P1(1),P1(2)) P1 es un valor cualquiera P2=[30,140]; % P2=(P2(1),P2(2)) P2 es un valor cualquiera x1=num2str(P1(1)); % num2str convierte un numero a char y1=num2str(P1(2)); % conversion de P2(1) a char, x1 es char x2=num2str(P2(1)); % conversion de P2(1) a char, x1 es char y2=num2str(P2(2)); % conversion de P2(1) a char, x1 es char % la conversion se hace porque la funcion text admite char o string text(P1(1),P1(2),['P1(',x1,',',y1,')']) %visualiza el punto P1 text(P2(1),P2(2),['P2(',x2,',',y2,')']) %visualiza el punto P2 x=[P1(1) P1(1) P2(1) P2(1) P1(1)]; % vector de ordenadas y=[P1(2) P2(2) P2(2) P1(2) P1(2)]; % vector abcisas % para poder graficar el cuadrado o rectangulo hold on % para que nose borre la foto de la ventana plot(x,y) % dibuja el rectangulo o el cudrado gtext('MI FOTO') % para poner un texto en cualquier lugar de la foto % la palabra 'MI FOTO' es cualquier palabra Saludos: JOSÉ JEREMIAS CABALLERO ASESOR DE TESIS Y PROYECTOS DONDE SE NECESITA MATLAB PROFESOR DE MATLAB Y METODOS NUMERICOS
Hola Laura; Muy interesante tu aplicación, al respecto te sugiero que hagas una interfaz grafica, allí podrias programar y ejecutar todos tus requerimientos con mayor comodidad, por ejemplo: Las lineas o recuadros los colocarías como el mouse, se puede programar para que sea algo dinamico. Las etiquetas igualmente se colocarian en cualquier lugar sin perder la imagen. Espero sea de ayuda. Saludos Dave correa.dave30@gmail.com
Pues muchas gracias Jose, lo pruebo y te digo. correa.dave, sí lo tengo integrado en una interfaz gráfica, lo que me piden es que introduciendo dos puntos (cada uno con su x y su y) sea capaz de hacer el rectángulo o cuadrado. Gracias de todas formas!
Muchas gracias a todos!! Ya me realiza la acción que quería de dibujarme el rectángulo o cuadrado. Lo de poner texto sobre la imagen también soy capaz ya de hacerlo. Gracias a todos por vuestras respuestas!!
Muchas gracias a todos!! Ya me realiza la acción que quería de dibujarme el rectángulo o cuadrado. Lo de poner texto sobre la imagen también soy capaz ya de hacerlo. Gracias a todos por vuestras respuestas!!
Buenos dias Laura Ayer lo iba a iba a poner el programa generico, pero estaba con sueño. bueno aqui te mando. Puedes leer las coordenadas desde el teclado. %==================================================== %EL PROGRAMA % OBSERVACIONES: % TANTO LA foto.jpg y el archivo en matlab deben estar en el mismo % directorio, para que se pueda ejecutar. clear, %borra variables de la memoria de matlab %limpia la ventana de comandos close all % cierra todas las graficas abiertas figure(gcf) % para q salte la figura al primer plano fotos=imread('fotos.jpg'); % imread para leer fotos image(fotos); % image para que visualice la foto axis('image'); % para q visualice sin deformacion la foto v=axis; % v=[xmin,xmax, ymin, y max] dimensiones de la foto fprintf('LAS DIMENSIONES DE LA FOTO ES\n'); fprintf('Ix=[%7.4f,%7.4f] ',v(1),v(2)); fprintf('Iy=[%7.4f,%7.4f]\n',v(3),v(4)); BOL=1; while BOL==1 P1=input('Ingrese el punto P1(x1,y1)='); if v(1)<=P1(1) && P1(1)<=v(2) && v(3)<=P1(2) && P1(2)<=v(4) BOL=0; else fprintf('El punto P1(%4.2f,%4.2f) no pertenece al foto\n',P1(1),P1(2)); end end while BOL==0 P2=input('Ingrese el punto P2(x2,y2)='); if v(1)<=P2(1) && P2(1)<=v(2) && v(3)<=P2(2) && P2(2)<=v(4) BOL=1; else fprintf('El punto P2(%4.2f,%4.2f) no pertenece al foto\n',P2(1),P2(2)); end end %P1=[180,60]; % P1=(P1(1),P1(2)) P1 es un valor cualquiera %P2=[30,140]; % P2=(P2(1),P2(2)) P2 es un valor cualquiera x1=num2str(P1(1)); % num2str convierte un numero a char y1=num2str(P1(2)); % conversion de P1(2) a char, y1 es char x2=num2str(P2(1)); % conversion de P2(1) a char, x2 es char y2=num2str(P2(2)); % conversion de P2(2) a char, y2 es char % la conversion se hace porque la funcion text admite char o string text(P1(1),P1(2),['P1(',x1,',',y1,')']) %visualiza el punto P1 text(P2(1),P2(2),['P2(',x2,',',y2,')']) %visualiza el punto P2 x=[P1(1) P1(1) P2(1) P2(1) P1(1)]; % vector de ordenadas y=[P1(2) P2(2) P2(2) P1(2) P1(2)]; % vector abcisas % para poder graficar el cuadrado o rectangulo hold on % para que nose borre la foto de la ventana plot(x,y) % dibuja el rectangulo o el cudrado gtext('MI FOTO') % para poner un texto en cualquier lugar de la foto % la palabra 'MI FOTO' es cualquier palabra hold off %==================================================== %======================================== %EJECUCION EN LA VENTANA DE COMANDO. >> fotojose LAS DIMENSIONES DE LA FOTO ES Ix=[ 0.5000,205.5000] Iy=[ 0.5000,238.5000] Ingrese el punto P1(x1,y1)=[100 150] Ingrese el punto P2(x2,y2)=[50 200] >> fotojose LAS DIMENSIONES DE LA FOTO ES Ix=[ 0.5000,205.5000] Iy=[ 0.5000,238.5000] Ingrese el punto P1(x1,y1)=[500 200] El punto P1(500.00,200.00) no pertenece al foto Ingrese el punto P1(x1,y1)=[50 2000] El punto P1(50.00,2000.00) no pertenece al foto Ingrese el punto P1(x1,y1)=[50 60] Ingrese el punto P2(x2,y2)=[500 200] El punto P2(500.00,200.00) no pertenece al foto Ingrese el punto P2(x2,y2)=[50 600] El punto P2(50.00,600.00) no pertenece al foto Ingrese el punto P2(x2,y2)=[150 210] %============================================ Saludos: JOSÉ JEREMIAS CABALLERO ASESOR DE TESIS Y PROYECTOS DONDE SE NECESITA MATLAB PROFESOR DE MATLAB Y METODOS NUMERICOS PROGRAMADOR EN MATLAB.
Hola Laura. Segun veo estas haciendo un interfaz grafica, es eso bueno, porque en un interfaz grafica tu puedes ponerles colores y se muy bien. Solo que un programa hecho en interfaz grafica no se puede golgar por el foro, no es tan simple, si te copio el codigo de interfaz grafica al foro,simplemente no va a funcionar. Cuando lo ejecutes. Pero se puede hacer. En estos dias lo haré, para ver como queda. Saludos: JOSÉ JEREMIAS CABALLERO ASESOR DE TESIS Y PROYECTOS DONDE SE NECESITA MATLAB PROFESOR DE MATLAB Y METODOS NUMERICOS PROGRAMADOR EN MATLAB.
Hola Laura. Este programa es mas genérico. Introduces por el teclado el numero de lados del poligono que deseas dibujar y se dibujara automaticamente haciendo clic izquierdo con el mouse la cantidad de veces que el numero que introducistes por el teclado. Ademas para dibujar un rectangulo, solo haces clic izquierdo dos veces, y los puntos que haces clic izquierdo seran los vertices del rectangulo. Bueno ejecutalo el programa y veras lo que hace. %==================================================== % EL PROGRAMA % OBSERVACIONES: % TANTO LA foto.jpg y el archivo en matlab deben estar en el mismo % directorio, para que se pueda ejecutar. clear, %borra variables de la memoria de matlab %clc, %limpia la ventana de comandos close all % cierra todas las graficas abiertas figure(gcf) % para q salte la figura al primer plano fotos=imread('fotos.jpg'); % imread para leer fotos image(fotos); % image para que visualice la foto axis('image'); % para q visualice sin deformacion la foto V=axis; % V=[xmin,xmax, ymin, y max] dimensiones de la foto n=input('Ingrese el numero lados del poligono n:'); hold on % para que nose borre la foto de la ventana [x,y]=ginput(n); x=[x;x(1)]; y=[y;y(1)]; plot(x,y) for i=1:length(x)-1; text(x(i),y(i),['P',num2str(i),'(',num2str(x(i)),',',num2str(y(i)),')']) end [X,Y]=ginput(2); P1=[X(1) Y(1)]; % P1=(P1(1),P1(2)) P1 es un valor cualquiera P2=[X(2) Y(2)]; % P2=(P2(1),P2(2)) P2 es un valor cualquiera xx=[P1(1) P1(1) P2(1) P2(1) P1(1)]; % vector de ordenadas yy=[P1(2) P2(2) P2(2) P1(2) P1(2)]; % vector abcisas % para poder graficar el cuadrado o rectangulo x1=num2str(P1(1)); % num2str convierte un numero a char y1=num2str(P1(2)); % conversion de P2(1) a char, x1 es char x2=num2str(P2(1)); % conversion de P2(1) a char, x1 es char y2=num2str(P2(2)); % conversion de P2(1) a char, x1 es char % la conversion se hace porque la funcion text admite char o string text(P1(1),P1(2),['P1(',x1,',',y1,')']) %visualiza el punto P1 text(P2(1),P2(2),['P2(',x2,',',y2,')']) %visualiza el punto P2 plot(xx,yy,'r')% dibuja el rectangulo o el cuadrado %==================================================== %======================================== %EJECUCION EN LA VENTANA DE COMANDO. >> fotojose2 Ingrese el numero lados del poligono n:3 Saludos: JOSÉ JEREMIAS CABALLERO ASESOR DE TESIS Y PROYECTOS DONDE SE NECESITA MATLAB PROFESOR DE MATLAB Y METODOS NUMERICOS PROGRAMADOR EN MATLAB.
Como puedo trazar una linea pero directamente en la matriz de la imagen. supongamos tengo una imagen binaria con las coordenadas del punto A (y1,x1) y las coordenadas del punto B(y2,x2) Como puedo trazar una linea paralela del punto A al punto B, pero no solo que lo muestre en "plot" si no que trace la linea directamente en la matriz!!! Gracias por su tiempo. Reconocimiento de matriculas Duda con el comando display |