将快照保存在循环中的变量中

时间:2017-04-04 16:46:22

标签: matlab image-processing

请在这方面需要帮助为什么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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

getsnapshot的输出是H-by-W-by-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所述,您需要确保将i初始化为1而不是0,因为MATLAB使用基于1的索引。

答案 2 :(得分: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