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