BIENVENIDO

Hola que tal a todos los enamorados de Matlab o que simplemente esten haciendo algo en este programa. dejen sus comentarios. espero pueda ayudarles esto en algo

Como tomar fotos, con matlab.

algunas veces nos topamos con problemas para tomar imagenes con matlab. esta es una solución. solo cambiando al argumento de la función  --pause(argumento) . donde el argumento es en segundos para 1,2,3,etc y 0.1,0.2 etc segundos.

el formato se puede cambiar de acuerdo a la cámara de ustedes.

no duden en preguntar

%% tomar foto
clc,clear all,close all;
imaqreset                           % sirve para resetear la compu y volver a instalar las camaras
                                     % que fueron instalados cuando matlab ya estaba en uso
imaqhwinfo;
adaptador=imaqhwinfo('winvideo');    % informa los tipos de camara que estan instalados
camara=imaqhwinfo('winvideo',1);     % asigna a camara los valores de la camara seleccionada
formats=camara.SupportedFormats;     % muestra los formatos de la camara
Video=videoinput('winvideo',1,'YUY2_352x288'); % toma el video de la camara seleccionada con el formato especificado 'YUY2_352x288'
src = getselectedsource(Video);      % asigna src los parametros del video
     % Los valores que voy a poner a continución son modificaciones a las propiedades de la cámara
get(src);
set(src, 'Saturation',45);          % controla la saturacion de la foto 45,160
preview(Video);                      % muestra el video preview tomado
start (Video);
pause(5);                           
% pausa el programa (tiempo en segundos)para luego hacer lo que sigue
% he observado que con este tiempo de espera para empezar a tomar las
% fotos la calidad de la imagen es muy buena
for p=1:2;
   J=getsnapshot(Video);                   % funcion para tomar la foto
   pause(0.5);                             % es el tiempo de espera entre una foto y otra
   K=rgb2gray(J);                          % convierte la imagen a escala de grises
   umbral=graythresh(K);
   %umbral=0.45;                            %umbral para diferenciar entre el negro y blanco
   bw=im2bw(K,umbral);                     %convierte la imagen a binario
   figure(2),subplot(1,2,p),imshow(bw),title(p); %muestra las imagenes en binario
   imwrite (bw,strcat(num2str(p),'.jpg'));  % nombra las fotos en formato jpg
end
stop(Video); %detiene el video
delete(Video); %elemina el video

15 comentarios:

  1. Esta muy interesante, ya que había probado varias cosas y nada me habia funcionado mediamanemente bien, sólo me queda una pregunta por hacerle.

    ¿Ud sabe una funcion o tiene un codigo para sleccionar un pedazo que uno quiera de la imagen o más exactamente seleccionar varios pedazos?

    Muchas Gracias.

    ResponderEliminar
  2. Este comentario ha sido eliminado por un administrador del blog.

    ResponderEliminar
  3. Hermano de que manera lo puedo meter a guide

    ResponderEliminar
    Respuestas
    1. no se que tanto sea tu conocimiento sobre como hacer un guide. lo que te puedo decir es que en el interprete de matlab tecleas esto>>guide...y automaticamente se habre una ventana y en ella seleccionas un guide en blanco. ya luego de ahi utilizando la herramieta de edicion pones unos botones, pantallas,. el codigo que pongo aqui lo puedes copiar y ponerlo en el guide, pero es neceario usar el set y get que son comandos en matlab para enviar informacion y obtener. suerte

      Eliminar
  4. Tengo un problema al capturar la imagen.. la cámara me muestra los verdaderos colores pero la imagen que capturo no. Creo que la imagen esta en RGB. Si sabes como ayudarme te agradecería.

    ResponderEliminar
    Respuestas
    1. lo que supongo que esta pasando es que tarda en capturar la luz la camara. para eso yo propongo la solucion de en el comando pause moverlo hasta que la camara digamos se "caliente" ejemplo >> pause(5)

      Eliminar
    2. Amigo tengo el mismo problema ya le he aumentado el tiempo para que capture la imagen pero persiste el problema, en el video se aprecia el color de forma correcta, pero al tomar la foto aparece de otro color, por ejemplo el rojo me aparece azul y el azul verde, yo estoy tratando de hacer una aplicación para que me indique que color es ya sea rojo, verde o azul, de acuerdo a la imagen que tome la webcam, no sé si pudiste solucionar el problema o si alguien sabe cómo solucionar esto se lo encargo.

      Muchas gracias por su atención.

      Eliminar
  5. me salen estos errorres al momento de ejecutar el codigo alguien me puede ayudar...¡¡¡¡

    ResponderEliminar
  6. comparte tus errores, esperamos poder resolverlos

    ResponderEliminar
  7. Excelente post, ya voy a ver como lo adapto para mi proyecto y posteriormente voy a ver si me sirve con octave o con scilab

    Felicitaciones sigue así!!

    ResponderEliminar
  8. Gracias por el programa....cuál es el nombre final de la imagen para poder procesarla?

    ResponderEliminar
  9. la primera se llama " J" que es la original. y la que esta en escala de grises es la "K".. dependiendo desde donde vaya la funcion "for". en mi caso solo toma 2 fotos "p=1 hasta 2

    ResponderEliminar
  10. a que se puede deber esto??
    camara=imaqhwinfo('winvideo',1);
    ??? Undefined function or method
    'imaqhwinfo' for input arguments
    of type 'char'.

    ResponderEliminar
  11. ??? Error using ==> im2bw>parse_inputs at 131
    IM2BW: Threshold luminance LEVEL has to be a non-negative number between 0 and 1.

    (muestra el video, pero no la captura de la fotografia)

    Error in ==> im2bw at 39
    [A,map,level] = parse_inputs(varargin{:});

    ResponderEliminar
  12. ??? Error using ==> im2bw>parse_inputs at 131
    IM2BW: Threshold luminance LEVEL has to be a non-negative number between 0 and 1.

    Error in ==> im2bw at 39
    [A,map,level] = parse_inputs(varargin{:});

    (muestra el video, mas no la fotografía)

    ResponderEliminar