Question

J'aimerais savoir comment enregistrer une vidéo dans MATLAB avec ma webcam.

Était-ce utile?

La solution

REMARQUE: Cette option est désormais mise à jour pour les versions plus récentes de MATLAB, car certaines des fonctionnalités les plus anciennes ont été remplacées et supprimées.

Si vous savez déjà comment capturer une seule image à partir d'une webcam , il ne vous reste plus qu'à assembler les images ensemble dans un film. Vous pouvez utiliser un objet VideoWriter pour ouvrez un fichier vidéo, puis ajoutez des images séquentielles à l'aide du writeVideo méthode. Par exemple:

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

Je viens d'utiliser une boucle for comme exemple simple, mais vous pouvez utiliser un timer si vous souhaitez capturer des images et les ajouter au fichier AVI à intervalles réguliers.

Autres conseils

Commencez par construire une interface d'entrée vidéo

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

Vous aurez besoin de régler le dernier bit pour votre webcam. Pour trouver une liste de webcam (et d’autres choses encore), utilisez:

imaqhwinfo

Ce qui suit fait de la première webcam un objet

a=imaqhwinfo('winvideo',1)

Trouvez la liste des formats vidéo pris en charge avec

a.SupportedFormats

Vous voudrez ensuite déterminer votre fréquence d'images (plus d'informations à ce sujet ici ):

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))

La propriété FrameGrabInterval spécifie la fréquence d'utilisation des images. sont stockés à partir du flux vidéo. Par exemple, si nous le fixons à 5, alors seulement 1 image sur 5 est conservée - les 4 autres images seront ignorées. À l'aide du nombre d'images par seconde, déterminez à quelle fréquence vous souhaitez obtenir des cadres

set(vid,'FrameGrabInterval',10);

Pour déterminer le nombre total d'images à acquérir, calculez le nombre total d'images acquises à la cadence du périphérique, puis divisez-les par FrameGrabInterval.

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

Vous êtes maintenant prêt à enregistrer et à lire des vidéos avec la commande getdata ( peekdata est également utile), cependant ...

Si vous souhaitez acquérir un grand nombre de cadres, il est plus pratique de consigner les images sur le disque plutôt que sur la mémoire. À l'aide de la boîte à outils Image Acquisition, vous pouvez enregistrer des images directement dans un fichier AVI. Nous configurons cela à l'aide de la propriété LoggingMode.

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

Créez un objet de fichier AVI auquel vous connecter, à l'aide de la commande avifile. Nous devons spécifier le nom de fichier à utiliser et la cadence à laquelle le fichier AVI doit être lu. Ensuite, définissez la propriété DiskLogger de l'objet d'entrée vidéo sur le fichier AVI.

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

Lancez l'acquisition time-lapse et attendez la fin de l'acquisition. Notez que la boîte à outils Image Acquisition n'attache pas MATLAB® en cours d'acquisition. Vous pouvez commencer l’acquisition et continuer à travailler dans MATLAB.

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

Une fois la capture terminée, récupérez l'objet fichier AVI et utilisez la fonction de fermeture pour libérer les ressources qui lui sont associées.

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

Une fois que vous avez terminé avec l'objet d'entrée vidéo, vous devez utiliser la fonction de suppression pour libérer les ressources matérielles qui lui sont associées et le supprimer de l'espace de travail à l'aide de la fonction clear.

delete(vid);
clear vid;

Une grande partie, mais pas la totalité, de ce qui précède provient de ici .

Lorsque vous appuyez sur start (vid) , vous remarquerez peut-être un peu de retard avant que les images ne commencent à être acquises. C'est mauvais si vous essayez de synchroniser la vidéo avec quelque chose. Dans ce cas, essayez de travailler avec le trigger :

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.

ici , vous trouverez plus d'informations sur les déclencheurs et la synchronisation.

Vous pouvez voir de superbes vidéos sur la capture et le traitement des images depuis votre webcam, afin que l'enregistrement ne soit pas compliqué:

http: // blogs. mathworks.com/videos/2008/01/18/cool-feature-video-processing-demos/

Dans ma vie universitaire, j'ai fait de ce projet le nom de

Enregistreur audio / vidéo & amp; application de lecteur basée sur MATLAB

En cela, j’ai fait l’enregistrement audio, l’enregistrement vidéo et la lecture dans la programmation matlab. vous pouvez télécharger le code source à partir de ici

J'ai récemment écrit un article sur la façon d'enregistrer de l'audio et de la vidéo synchronisés dans MATLAB en envoyant des lignes de commande au programme ffmpeg. Vous pouvez en savoir plus sur ici , mais vous trouverez ci-dessous un exemple utilisant certains paramètres judicieux. sur mon ordinateur.

dos('ffmpeg -list_devices true -f dshow -i dummy')

dos('ffmpeg -f dshow -list_options true -i video="USB2.0 HD UVC WebCam')

dos('ffmpeg -f dshow -video_size 1280x720 -framerate 30 -audio_buffer_size 80 -i video="USB2.0 HD UVC WebCam":audio="Microphone (Realtek High Definition Audio)" -t 10 -c:v libx264 -preset veryfast -crf 25 test_vid2.mp4');
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top