2017-04-04 39 views
1

請在這個爲什麼while循環中的數據(i)變量給我一個錯誤在這裏我想每5秒後拍一張照片,我需要它連續,所以我用while( 1)...將快照保存在循環內的變量

vid = videoinput('winvideo',1); 
set(vid, 'FramesPerTrigger', Inf); 
set(vid, 'ReturnedColorspace', 'rgb'); 
i = 0; 
while(1) 
    data(i) = getsnapshot(vid); 
    imshow(data(i)); 
    i=i+1; 
    pause(5); 
end 

回答

0

創建cell數組來存儲幀,並使用sprintf功能不覆蓋所獲取的幀。

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);'創建一個單元格數組。通常,您應該在循環前預先分配單元格數組,以便進行速度計算,但是在您的情況下,您並不知道「單元格」的大小是多少 – Pol

0

getsnapshot的輸出是H-通過-W-通過-B矩陣,其中H是高度,W在寬度和B是顏色通道的數量。在你的情況下,你已經指定你想要一個RGB圖像,所以你的輸出將是H x W x 3,這顯然不適合於單個元素data

而應該使用一個單元陣列

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

或4D矩陣存儲數據

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

更新

正如@Sardar指出的,你需要做確定你初始化i1而不是0,因爲MATLAB使用1-基於索引。

+0

還要注意的'i'初始化 –

+0

@SardarUsama良好的漁獲 – 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