MATLABでWebカメラからビデオを録画するにはどうすればよいですか?
-
08-07-2019 - |
質問
Webカメラを使用してMATLABでビデオを録画する方法を知りたい。
解決
注: これは、古い機能の一部が置き換えられて削除されたため、MATLABの新しいバージョンで使用するために更新されました。
ウェブカメラから単一の画像をキャプチャする方法を既に知っている場合、それは単にステッチの問題であるはずです画像をまとめてムービーにします。 VideoWriter
オブジェクトを使用して、ムービーファイルを開き、 writeVideo
メソッド。例:
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
単純な例としてforループを使用しましたが、 timer
代わりに、定期的に画像をキャプチャしてAVIファイルに追加する場合。
他のヒント
最初にビデオ入力インターフェースを構築
vid = videoinput('winvideo',1,'RGB24_400x300');
ウェブカメラの最後のビットを調整する必要があります。ウェブカメラデバイスのリスト(およびその他のもの)を見つけるには、次を使用します。
imaqhwinfo
以下は、最初のウェブカメラをオブジェクトにします
a=imaqhwinfo('winvideo',1)
サポートされているビデオ形式のリストを見つける
a.SupportedFormats
その後、フレームレートを決定します(詳細については、このこちら):
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))
FrameGrabInterval
プロパティは、フレームの頻度を指定しますビデオストリームから保存されます。たとえば、5に設定すると、5つのフレームのうち1つだけが保持され、他の4つのフレームは破棄されます。フレームレートを使用して、フレームを取得する頻度を決定します
set(vid,'FrameGrabInterval',10);
合計で取得するフレーム数を決定するには、デバイスのフレームレートで取得されるフレームの合計数を計算し、FrameGrabIntervalで除算します。
capturetime = 30;
interval = get(vid,'FrameGrabInterval');
numframes = floor(capturetime * framerate / interval)
getdata
コマンドを使用してビデオを録画および再生する準備ができました( peekdata
も役立ちます)...
多数のフレームを取得する場合、メモリではなくディスクに画像を記録する方が実用的です。 Image Acquisition Toolboxを使用すると、AVIファイルに画像を直接記録できます。 LoggingModeプロパティを使用してこれを設定します。
set(vid,'LoggingMode','disk');
avifileコマンドを使用して、ログインするAVIファイルオブジェクトを作成します。使用するファイル名と、AVIファイルを再生するフレームレートを指定する必要があります。次に、ビデオ入力オブジェクトのDiskLoggerプロパティをAVIファイルに設定します。
avi = avifile('timelapsevideo','fps',framerate);
set(vid,'DiskLogger',avi);
タイムラプス取得を開始し、取得が完了するまで待ちます。 Image Acquisition ToolboxはMATLAB®を拘束しないことに注意してください。取得中です。取得を開始し、MATLABで作業を続けることができます。
start(vid);
wait(vid,Inf); % Wait for the capture to complete before continuing.
キャプチャが完了したら、AVIファイルオブジェクトを取得し、close関数を使用してそれに関連付けられているリソースを解放します。
avi = get(vid,'DiskLogger');
avi = close(avi);
ビデオ入力オブジェクトの処理が完了したら、delete関数を使用してそれに関連付けられているハードウェアリソースを解放し、clear関数を使用してワークスペースから削除する必要があります。
delete(vid);
clear vid;
上記のすべてではありませんが、大部分はこちら。
start(vid)
を押すと、フレームの取得が開始されるまでに少し遅れが生じることがあります。ビデオを何かと同期しようとしている場合、これは悪いことです。この場合、トリガー:
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.
トリガーと同期の詳細については、こちらをご覧ください。
>Google が公開されましたこれら:
ここでは、ウェブカメラから画像をキャプチャして処理する方法を説明した素晴らしいビデオを見ることができます。録画は難しくないはずです:
http:// blogs。 mathworks.com/videos/2008/01/18/cool-feature-video-processing-demos/
大学時代、このプロジェクトを
という名前で作成しましたオーディオ/ビデオレコーダー& MATLABベースのプレーヤーアプリケーション
私は、MATLABプログラミングでオーディオの記録とビデオの記録と再生を行いました。 こちら
からソースコードをダウンロードできます。最近、ffmpegプログラムにコマンドラインを送信して、同期されたオーディオとビデオをMATLABで記録する方法に関するブログ投稿を書きました。詳細はこちらで確認できますが、以下は意味のある設定を使用したサンプルです。私のコンピュータ上で。
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');