Image 在MATLAB中以指定的帧速率采集图像,并将图像保存为硬盘上的TIFF文件

Image 在MATLAB中以指定的帧速率采集图像,并将图像保存为硬盘上的TIFF文件,image,matlab,image-processing,camera,tiff,Image,Matlab,Image Processing,Camera,Tiff,我正试图用MATLAB控制一个点灰蚱蜢3(USB3)相机(型号GS3-U3-41C6NIR-C)来获取图像。我需要以规定的帧速率(例如12 FPS)采集图像,持续时间为80秒,并将图像以TIFF格式(灰度)保存在计算机硬盘上。我安装了“pointgrey”和“winvideo”适配器以及最新版本的Matlab和图像采集工具箱。(作为操作系统,我使用Windows 7 Professional 64位。) 如何将帧速率设置为每秒12帧(或类似值) 如何将采集的图像以TIFF(灰度)文件的形式存储

我正试图用MATLAB控制一个点灰蚱蜢3(USB3)相机(型号GS3-U3-41C6NIR-C)来获取图像。我需要以规定的帧速率(例如12 FPS)采集图像,持续时间为80秒,并将图像以TIFF格式(灰度)保存在计算机硬盘上。我安装了“pointgrey”和“winvideo”适配器以及最新版本的Matlab和图像采集工具箱。(作为操作系统,我使用Windows 7 Professional 64位。)

  • 如何将帧速率设置为每秒12帧(或类似值)
  • 如何将采集的图像以TIFF(灰度)文件的形式存储在HD上?到目前为止,我只能将图像存储为AVI文件,然后再转换为.tif文件

有人能帮我吗?非常感谢你的帮助

您的网络摄像头有一组已定义的帧速率供您选择,您不能将其设置为任何您想要的随机帧速率。您可以使用函数
getselectedsource()
将视频对象作为输入,找到帧速率集并进行更改

 src = getselectedsource(vid)

  Display Summary for Video Source Object:

  Index:   SourceName:   Selected:
  1        'input1'      'on'    
结构
src
现在包含并控制许多网络摄像头属性,其中包括帧速率。使用函数
propinfo()
查看当前和可用的帧速率

propinfo(src,'FrameRate')

ans = 

           Type: 'string'
     Constraint: 'enum'
ConstraintValue: {'30.0000'  '15.0000'}
   DefaultValue: '30.0000'
       ReadOnly: 'whileRunning'
 DeviceSpecific: 1
对于我的网络摄像头,我有两种选择,帧率为30或15。要更改帧速率,请执行以下操作:

set(src, 'FrameRate','15');
为了测试帧速率,我们可以采集一些图像并记录帧速率

vid.FramesPerTrigger = 50;
set(src, 'FrameRate','30')
start(vid); [frames, timeStamp] = getdata(vid);
1/mean(diff(timeStamp))

ans =

   29.1797

set(src, 'FrameRate','15')
start(vid); [frames, timeStamp] = getdata(vid);
1/mean(diff(timeStamp))

ans =

   15.0109
要将图像另存为.tiff,请在帧上循环时使用
imwrite()
函数,并使用
sprintf()
避免覆盖图像

for ii=1:size(frames,4)
     imwrite(frames(:,:,:,ii),sprintf('web%i.tiff',ii));
end

到底是什么问题?嗨,高尔,谢谢你的提问!我只是编辑了我的原始问题,以使问题更清楚。问题是我无法将采集的图像作为tif(灰度)文件存储在HD上。此外,我正在努力设置一个定义的帧速率(12 fps)。我将非常感谢你的帮助!非常感谢你,盖尔!我非常感谢你的帮助!你的代码工作得很好。但是,对于数量较多的FramesPerTrigger(我最终需要1000个左右),MATLAB会在命令窗口中返回一条消息,说明“无法为传入的图像帧分配内存。请使用IMAQMEM修改帧内存限制。”因此,GETDATA在帧可用之前超时。我想知道怎样才能解决记忆问题。(我的实际帧速率是11.99 fps)。@ron767没问题。内存问题通常很棘手,我也不是专家,但你可以尝试降低所拍摄图像的分辨率。如果这不起作用,我建议你再发一个问题,这样更多的人会看到这个问题。
for ii=1:size(frames,4)
     imwrite(frames(:,:,:,ii),sprintf('web%i.tiff',ii));
end