Matlab2019a实现两个USB摄像头的调用及视频的保存

1、安装适配器

(1)如果没有安装适配器,那么在命令行输入 ‘imaqhwinfo’ ,将会报错,然后直接点击错误中的链接,去下载一个适配器,这个过程需要注册一个Matlab账号。

(2)安装成功之后在命令行输入:

obj = imaqhwinfo

会得到一个结构体,是适配器的相关信息,比如我的就为:

obj = 

  包含以下字段的 struct:

    InstalledAdaptors: {
     'winvideo'}
        MATLABVersion: '9.6 (R2019a)'
          ToolboxName: 'Image Acquisition Toolbox'
       ToolboxVersion: '6.0 (R2019a)'

可以看到,我的适配器名称为’winvideo’。

(3)命令行输入:

obj = imaqhwinfo('winvideo')

同样可以得到一个结构体:

obj = 

  包含以下字段的 struct:

       AdaptorDllName: 'C:\ProgramData\MATLAB\SupportPackages\R2019a\toolbox\imaq\supportpackages\genericvideo\adaptor\win64\mwwinvideoimaq.dll'
    AdaptorDllVersion: '6.0 (R2019a)'
          AdaptorName: 'winvideo'
            DeviceIDs: {
     [1]  [2]  [3]}
           DeviceInfo: [1×3 struct]

可以看到,DeviceIDs 有3个,这是因为我插了两个USB摄像头,同时还有笔记本自带的摄像头。Matlab给这三个摄像头分别分配一个ID,以此来进行区分。

2、单摄像头的调用

Matlab中调用摄像头实际上很简单,利用 ‘Image Acquisition Toolbox’ 即可。
(1)创建 videoinput 对象,函数句法为:
obj = videoinput(adaptorname,deviceID,format)
这里我采用 ‘winvideo’ 适配器,同时从 DeviceID = 1 的设备,以默认格式获取数据。

obj = videoinput('winvideo',1);

(2)进行视频的预览:

obj = videoinput('winvideo',1);
preview(obj);

可以直接从窗口中看到实时视频:
Matlab2019a实现两个USB摄像头的调用及视频的保存_第1张图片
(3)图片的保存

obj = videoinput('winvideo',1);
preview(obj);
pause(0.1);%如果不延迟的话,拍出来的照片有点糊,因为相机还没对焦好,可以根据个人情况选择。
im = getsnapshot(obj);%抓取obj对象当前的一帧。
imwrite(im,'Photo.jpg');%将图片保存在当前文件夹里。
delete(obj);%程序任务完成后删除对象,释放空间。

(4)视频的保存

obj = videoinput('winvideo',1);
set(obj,'TriggerRepeat',Inf);%捕获次数设为无穷大,表示一直重复捕获,直到出现错误或内存不够。
set(obj,'FramesPerTrigger',1);%每次捕获放进缓冲区的帧数。
preview(obj);%打开视频预览窗口,在窗口中可以看到视频的FPS,即Frames Per Second
writerObj = VideoWriter( ['test.avi'] );%将视频保存在当前文件夹下
writerObj.FrameRate = 15;%这个帧数要自己设置为和FPS保持一致,这决定了写视频文件的时候,每一秒有多少帧图片。如果这个值设置的和FPS不匹配,那么最终保存的视频会类似于开了倍速一样。
open(writerObj);%打开对象之后才能往进写数据帧。
start(obj)%obj对象开始捕获
    for i = 1:150 %将捕获的前150帧保存为视频,根据上面FrameRate可以算出,视频长为10秒。
        frame = getdata(obj);
        writeVideo(writerObj,frame);
    end
close(writerObj);%关闭对象,即完成视频的保存。
delete(obj);

3、两个摄像头同时调用

将单个摄像头的代码中的对象分别设置两个即可。

你可能感兴趣的:(Matlab学习,matlab)