2017-04-04 56 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