私は MATLAB の初心者で、カメラから 5 秒間隔で 20 枚の画像を取得して保存する方法を知りたいです。どうもありがとうございました。
4 に答える
最初にビデオ入力インターフェイスを構築します
vid = videoinput('winvideo',1,'RGB24_400x300');
ウェブカメラの最後のビットを調整する必要があります。ウェブカメラ デバイス (およびその他のもの) のリストを見つけるには、次を使用します。
imaqhwinfo
以下は、最初のウェブカメラをオブジェクトにします
a=imaqhwinfo('winvideo',1)
サポートされているビデオ形式のリストを見つける
a.SupportedFormats
次に、インターフェイスを起動します。
start(vid);
preview(vid);
これで、次のことができます。
pics=cell(1,20)
for i=1:20
pause(5);
pics{i}=getsnapshot(vid);
end
または、他のコメンテーターが指摘したように、間隔に Matlab タイマーを使用することもできます。
かなり短い間隔 (1 秒あたり 1 回以上) で画像をキャプチャしたい場合は、Web カメラをビデオ ソースと見なす方が便利な場合があります。それを達成するための方法を説明するこの質問への回答を残しました。
これは、1 つのイメージを取得するための簡単なチュートリアル です。
編集:
1 つの画像を取得できるようになったので、20 の画像を取得したいと考えています。タイマー オブジェクトまたは単純な for ループが必要になります。
「実行するタスク」フィールドを必ず 20 に設定してください。また、1 つの写真スナップのすべてのコードを 1 つの関数にまとめる必要があります。
これにはいくつかの方法があり、それぞれに長所と短所があります。これまでに投稿した情報に基づいて、これを行う方法は次のとおりです。
vid = videoinput('dcam', 1'); % Change for your hardware of course.
vid.FramesPerTrigger = 20;
vid.TriggerRepeat = inf;
triggerconfig(vid, 'manual');
vid.TimerFcn = 'trigger(vid)';
vid.TimerPeriod = 5;
start(vid);
これにより、STOP を呼び出すまで、5 秒ごとに 20 枚の画像が取得されます。TriggerRepeat パラメータを変更して、取得が発生する回数を変更できます。
これは明らかに、画像が取得された後に画像の処理を行いません。
画像を取得するために、カメラにはコンピューターから制御するための文書化された方法が付属していますか? MATLAB は、外部ライブラリへのリンクをサポートしています。または、MatlabDoug が提案する適切な MATLAB ツールボックスを購入することもできます。
イメージを保存するには、おそらくIMWRITEが最も簡単なオプションです。
アクションを繰り返すには、 PAUSEを含む単純なFORループを使用すると、ほとんど作業を行わずに、大まかに必要なものを得ることができます。
for ctr = 1:20
img = AcquireImage(); % your function goes here
fname = ['Image' num2str(ctr)]; % make a file name
imwrite(img, fname, 'TIFF');
pause(5); % or whatever number suits your needs
end
ただし、正確な 5 秒間隔が必要な場合は、 TIMERに飛び込む必要があります。簡単な例を次に示します。
function AcquireAndSave
persistent FileNum;
if isempty(FileNum)
FileNum = 1;
end
img = AcquireImage();
fname = ['Image' num2str(FileNum)];
imwrite(img, fname, 'TIFF');
disp(['Just saved image ' fname]);
FileNum = FileNum + 1;
end
>> t = timer('TimerFcn', 'ShowTime', 'Period', 5.0, 'ExecutionMode', 'fixedRate');
>> start(t);
...you should see the disp line from AcquireAndSave repeat every 5 seconds...
>> stop(t);
>> delete(t);