Web カメラを使用して MATLAB でビデオを録画する方法を知りたいです。
6 に答える
最初にビデオ入力インターフェースを構築します
vid = videoinput('winvideo',1,'RGB24_400x300');
Webカメラの最後のビットを調整する必要があります。Webカメラデバイス(およびその他のもの)のリストを見つけるには、次を使用します。
imaqhwinfo
以下は、最初のWebカメラをオブジェクトにします
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(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.
トリガーと同期の詳細については、こちらをご覧ください。
注: 古い機能の一部が置き換えられて削除されたため、これは新しいバージョンの MATLAB で使用できるように更新されました。
ウェブカメラから 1 つの画像をキャプチャする方法を既に知っている場合は、画像をつなぎ合わせてムービーにするだけです。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 ファイルに追加する場合は、 を使用することをお勧めします。
Googleはこれらを明らかにしました:
ここでは、Webカメラから画像をキャプチャして処理する方法についての優れたビデオを見ることができるので、記録は難しくありません。
http://blogs.mathworks.com/videos/2008/01/18/cool-feature-video-processing-demos/
私の大学生活の中で、私はこのプロジェクトを
MATLAB ベースのオーディオ/ビデオ レコーダー & プレーヤー アプリケーション
その中で、私はmatlabプログラミングでオーディオ録音とビデオ録音と再生を行いました。ここからソースコードをダウンロードできます