2017-04-04 10 views

答えて

0

フレームを格納し、取得したフレームを上書きしないようにsprintf機能を使用するcellアレイを作成します。

vid = videoinput('winvideo',1); 
set(vid, 'FramesPerTrigger', Inf); 
set(vid, 'ReturnedColorspace', 'rgb'); 

i = 1; 
while true 
    data{i} = getsnapshot(vid); 
    imwrite(data{i}, sprintf('imageName%d.jpg',i))%save in the current folder 
    imshow(data{i}); 
    i=i+1; 
    pause(5); 
end 
+0

に気づきますか? –

+0

セル配列を作成するには、[cell](http://uk.mathworks.com/help/matlab/ref/cell.html)を使用します。コードでは 'data {i} = getsnapshot(vid);と書いて、セル配列を作成します。通常、速度計算のためにループの前にセル配列をあらかじめ割り当てておくべきですが、あなたの場合には 'cell'のサイズ – Pol

0

出力Hが高さH・バイ・W・バイ・B行列であり、Wは幅であり、Bは、カラーチャンネルの数です。あなたの場合は、出力がH x W x 3になるようにRGB画像を指定するように指定しました。これは明らかに単一の要素dataに収まりません。

あなたが代わりに@Sardarで述べたように、あなたが作る必要がある

更新

data(:,:,:,i) = getsnapshow(vid); 
imshow(data(:,:,:,i)) 

データを格納するセル配列

data{i} = getsnapshot(vid); 
imshow(data{i}) 

または4D行列のいずれかを使用する必要があります

0ではなくが1に初期化されていることを確認してください。これは、MATLABが1-ベースのインデックス作成。

+0

はまた 'i' –

+0

@SardarUsama大漁の初期化私はセルアレイSIRを作成する方法 – Suever

1

明らかに、data(0)は間違った使い方です。行数と列数はゼロより大きくなければならず、structを使用して画像/動画フレームを保存することをお勧めします。

vidWidth = 600; % frame\pic width 
vidHeight = 800; % frame\pic height 
vidstruct = struct('cdata',zeros(vidHeight,vidWidth,3,'uint8'),'colormap',[]); 
index = 1; 
while(1) 
    vidstruct(index).cdata = getsnapshot(vid); 
    imshow(vidstruct(index).cdata); 
    index = index+1; 
    pause(5); 
end 
関連する問題