3

私は MATLAB の初心者で、カメラから 5 秒間隔で 20 枚の画像を取得して保存する方法を知りたいです。どうもありがとうございました。

4

4 に答える 4

6

最初にビデオ入力インターフェイスを構築します

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 カメラをビデオ ソースと見なす方が便利な場合があります。それを達成するための方法を説明するこの質問への回答を残しました。

于 2012-09-20T09:37:12.950 に答える
1

これは、1 つのイメージを取得するための簡単なチュートリアル です。

編集:

1 つの画像を取得できるようになったので、20 の画像を取得したいと考えています。タイマー オブジェクトまたは単純な for ループが必要になります。

簡単なタイマー オブジェクトの例

MATLAB のタイマーのビデオ例

「実行するタスク」フィールドを必ず 20 に設定してください。また、1 つの写真スナップのすべてのコードを 1 つの関数にまとめる必要があります。

于 2009-09-23T18:41:20.970 に答える
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 パラメータを変更して、取得が発生する回数を変更できます。

これは明らかに、画像が取得された後に画像の処理を行いません。

于 2009-09-24T12:54:13.070 に答える
0

画像を取得するために、カメラにはコンピューターから制御するための文書化された方法が付属していますか? 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);
于 2009-09-23T21:13:21.013 に答える