Saltar al contenido

¿Cómo grabo video desde una cámara web en MATLAB?

Solución:

Primero construya una interfaz de entrada de video

vid = videoinput('winvideo',1,'RGB24_400x300');

Deberá ajustar el último bit para su cámara web. Para encontrar una lista de dispositivos de cámara web (y otras cosas además) use:

imaqhwinfo

Lo siguiente convierte la primera cámara web en un objeto

a=imaqhwinfo('winvideo',1)

Encuentre la lista de formatos de video compatibles con

a.SupportedFormats

Luego, querrá determinar su velocidad de fotogramas (más sobre esto aquí):

set(vid,'FramesPerTrigger',100);
start(vid);
wait(vid,Inf);

% Retrieve the frames and timestamps for each frame.
[frames,time] = getdata(vid, get(vid,'FramesAvailable'));

% Calculate frame rate by averaging difference between each frame's timestamp
framerate = mean(1./diff(time))

los FrameGrabInterval La propiedad especifica la frecuencia con la que se almacenan los fotogramas del flujo de vídeo. Por ejemplo, si lo configuramos en 5, solo se conservará 1 de cada 5 fotogramas; los otros 4 fotogramas se descartarán. Utilizando la velocidad de fotogramas, determine la frecuencia con la que desea obtener fotogramas.

set(vid,'FrameGrabInterval',10);

Para determinar cuántos fotogramas adquirir en total, calcule el número total de fotogramas que se adquirirían a la velocidad de fotogramas del dispositivo y luego divídalo por FrameGrabInterval.

capturetime = 30;
interval = get(vid,'FrameGrabInterval');
numframes = floor(capturetime * framerate / interval)

Ahora está listo para grabar y reproducir videos con el getdata comandopeekdata también es útil), sin embargo …

Si se va a adquirir una gran cantidad de fotogramas, es más práctico registrar las imágenes en el disco que en la memoria. Con la Caja de herramientas de adquisición de imágenes, puede registrar imágenes directamente en un archivo AVI. Configuramos esto usando la propiedad LoggingMode.

set(vid,'LoggingMode','disk');

Cree un objeto de archivo AVI para iniciar sesión, utilizando el comando avifile. Debemos especificar el nombre de archivo que se utilizará y la velocidad de fotogramas a la que se debe reproducir el archivo AVI. Luego, establezca la propiedad DiskLogger del objeto de entrada de video en el archivo AVI.

avi = avifile('timelapsevideo','fps',framerate);
set(vid,'DiskLogger',avi);

Inicie la adquisición de lapso de tiempo y espere a que se complete la adquisición. Tenga en cuenta que Image Acquisition Toolbox no ata MATLAB® mientras se está adquiriendo. Puede iniciar la adquisición y seguir trabajando en MATLAB.

start(vid);
wait(vid,Inf); % Wait for the capture to complete before continuing.

Una vez que se complete la captura, recupere el objeto de archivo AVI y use la función de cierre para liberar los recursos asociados con él.

avi = get(vid,'DiskLogger');
avi = close(avi);

Cuando haya terminado con el objeto de entrada de video, debe usar la función de eliminación para liberar los recursos de hardware asociados con él y eliminarlo del espacio de trabajo con la función de borrar.

delete(vid);
clear vid;

Una gran parte, pero no todo, de lo anterior se extrajo de aquí.

Cuando golpeas start(vid) puede notar que hay un pequeño retraso antes de que comiencen a adquirirse los fotogramas. Esto es malo si intentas sincronizar el video con algo. En este caso, querrá intentar trabajar con el disparador:

triggerconfig(vid,'manual');
start(vid); %There'll be a delay here, but nothing is being captured
trigger(vid); %Use this line when you want the capture to start. There should be very little delay.

Más información sobre disparadores y sincronización está aquí.

NOTA: Esto ahora está actualizado para su uso con versiones más recientes de MATLAB, ya que algunas de las funciones anteriores se han reemplazado y eliminado.

Si ya sabe cómo capturar una sola imagen desde una cámara web, entonces solo debería ser cuestión de unir las imágenes en una película. Puedes usar un VideoWriter objeto para abrir un archivo de película y luego agregar imágenes secuenciales usando el writeVideo método. Por ejemplo:

aviObject = VideoWriter('myVideo.avi');  % Create a new AVI file
for iImage = 1:100                       % Capture 100 frames
  % ...
  % You would capture a single image I from your webcam here
  % ...
  writeVideo(aviObject, I);  % Add the image to the AVI file
end
close(aviObject);  % Close the AVI file

Solo usé un bucle for como un ejemplo simple, pero es posible que desee usar un timer si en cambio desea capturar imágenes y agregarlas al archivo AVI a intervalos de tiempo regulares.

Google reveló estos:

  1. Crear archivo de video a partir de una imagen o dispositivo
  2. Captura de imágenes usando la cámara web en MATLAB
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *