Frage

Ich würde gerne wissen, wie ich ein Video in MATLAB mit meinem Webcam aufzeichnen kann.

War es hilfreich?

Lösung

. Hinweis: Das jetzt für den Einsatz mit neueren Versionen von MATLAB aktualisiert wird, da einige der älteren Funktionalität abgelöst und entfernt wurden,

Wenn Sie bereits wissen, wie href="https://stackoverflow.com/q/1467692/52738"> zum erfassen, dann sollte es nur eine Frage der Naht sein die Bilder zusammen in einem Film. Sie können eine VideoWriter Objekt eine Filmdatei zu öffnen, und fügen Sie dann sequenzielle Bilder unter Verwendung der writeVideo Methode. Zum Beispiel:

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

Ich habe nur eine for-Schleife als ein einfaches Beispiel, aber Sie können eine timer , wenn Sie stattdessen Bilder aufnehmen möchten und sie in die AVI-Datei in regelmäßigen Zeitabständen hinzuzufügen.

Andere Tipps

Zuerst wird eine Videoeingangsschnittstelle bauen

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

Sie müssen das letzte Bit für Ihre Webcam einzustellen. Um eine Liste von Webcam-Geräte zu finden (und andere Dinge neben) verwenden:

imaqhwinfo

Im Folgenden macht die erste Webcam in ein Objekt

a=imaqhwinfo('winvideo',1)

Hier finden Sie die Liste der unterstützten Videoformate mit

a.SupportedFormats

Sie werden dann wollen Ihre Frame-Rate bestimmen (mehr dazu: hier ):

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

Die FrameGrabInterval Eigenschaft gibt an, wie oft Frames aus dem Videostrom gespeichert werden. Zum Beispiel, wenn wir es auf 5 setzen, dann nur 1 in 5 Rahmen gehalten wird - die anderen 4 Frames werden verworfen. Mit Hilfe der Framerate, festzustellen, wie oft Sie wollen, Frames bekommen

set(vid,'FrameGrabInterval',10);

Um zu bestimmen, wie viele Bilder insgesamt zu erwerben, berechnen die Gesamtzahl der Bilder, die auf dem Gerät des Frame-Rate erfasst werden würde, und dann teilen durch die FrameGrabInterval.

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

Sie sind nun bereit, mit Video aufzeichnen und spielen mit dem getdata Befehl (peekdata ist auch hilfreich), aber ...

Wenn eine große Anzahl von Frames erfaßt wird, ist es praktischer, die Bilder auf der Festplatte zu protokollieren, anstatt in dem Speicher. Unter Verwendung der Image Acquisition Toolbox können Sie Bilder melden Sie sich direkt in eine AVI-Datei. Wir konfigurieren dies die Logging Eigenschaft.

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

Erstellen Objekt eines AVI-Datei anmelden, den avifile Befehl. Wir müssen die Dateinamen angeben zu verwenden, und die Frame-Rate, die die AVI-Datei an wiedergegeben werden soll. Dann stellen Sie die DiskLogger Eigenschaft des Videoeingangs Objekt in die AVI-Datei.

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

Starten Sie die Zeitrafferaufnahme und warten, bis die Akquisition abzuschließen. Beachten Sie, dass das Image Acquisition Toolbox nicht MATLAB® nicht binden, während es zu erwerben. Sie können die Erfassung starten und halten in MATLAB arbeiten.

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

Sobald die Erfassung abgeschlossen ist, rufen Sie das AVI-Datei-Objekt, und verwenden Sie die Close-Funktion, die Ressourcen mit ihm verbunden zu lösen.

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

Wenn Sie mit dem Videoeingang Objekt fertig sind, sollten Sie die Löschfunktion verwenden, um die Hardware-Ressourcen mit ihm verbunden zu befreien, und entfernen Sie sie aus dem Arbeitsbereich die klare Funktion.

delete(vid);
clear vid;

Ein großer Teil, aber nicht alle der oben wurde von hier .

Wenn Sie treffen start(vid) Sie werden feststellen, dass es ein bisschen eine Verzögerung vor dem Rahmen zu erwerb beginnen. Das ist schlecht, wenn Sie versuchen, das Video mit etwas zu synchronisieren. In diesem Fall sollten Sie mit dem

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.

Weitere Informationen über Trigger und Synchronisation ist hier .

Hier können Sie tolle Videos sehen, wie die Bilder von der Webcam zu erfassen und zu verarbeiten, so dass Aufnahme sollte nicht schwer sein:

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

In meinem Leben am College habe ich dieses Projekt als

genannt gemacht

Audio / Video-Recorder & Player-Anwendung basierend auf MATLAB

, dass ich habe Audio-Aufnahme und Video-Aufnahme und Wiedergabe in Matlab-Programmierung. Sie können Quellcode herunterladen von hier

Ich schrieb vor kurzem eine Blog-Post darüber, wie durch das Senden Befehlszeilen mit dem ffmpeg-Programm synchronisiert Audio und Video in MATLAB aufzunehmen. Sie können mehr hier erfahren, aber unten eine Probe einige Einstellungen ist, dass Sinn gemacht auf meinem Computer.

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');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top