请选择 进入手机版 | 继续访问电脑版

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

[复制链接]
命中不缺你 发表于 2021-1-3 12:18:05 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
1、安装适配器

(1)如果没有安装适配器,那么在下令行输入 ‘imaqhwinfo’ ,将会报错,然后直接点击错误中的链接,去下载一个适配器,这个过程需要注册一个Matlab账号。
(2)安装乐成之后在下令行输入:
  1. obj = imaqhwinfo
复制代码
会得到一个布局体,是适配器的相关信息,好比我的就为:
  1. obj =   包罗以下字段的 struct:    InstalledAdaptors: {'winvideo'}        MATLABVersion: '9.6 (R2019a)'          ToolboxName: 'Image Acquisition Toolbox'       ToolboxVersion: '6.0 (R2019a)'
复制代码
可以看到,我的适配器名称为’winvideo’。
(3)下令行输入:
  1. obj = imaqhwinfo('winvideo')
复制代码
同样可以得到一个布局体:
  1. 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 的设备,以默认格式获取数据。
  1. obj = videoinput('winvideo',1);
复制代码
(2)举行视频的预览:
  1. obj = videoinput('winvideo',1);preview(obj);
复制代码
可以直接从窗口中看到实时视频:

(3)图片的生存
  1. obj = videoinput('winvideo',1);preview(obj);pause(0.1);%如果不延迟的话,拍出来的照片有点糊,因为相机还没对焦好,可以根据个人情况选择。im = getsnapshot(obj);%抓取obj对象当前的一帧。imwrite(im,'Photo.jpg');%将图片生存在当前文件夹里。delete(obj);%步调任务完成后删除对象,释放空间。
复制代码
(4)视频的生存
  1. obj = videoinput('winvideo',1);set(obj,'TriggerRepeat',Inf);%捕获次数设为无穷大,体现一直重复捕获,直到出现错误或内存不敷。set(obj,'FramesPerTrigger',1);%每次捕获放进缓冲区的帧数。preview(obj);%打开视频预览窗口,在窗口中可以看到视频的FPS,即Frames Per SecondwriterObj = 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);    endclose(writerObj);%关闭对象,即完成视频的生存。delete(obj);
复制代码
3、两个摄像头同时调用

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

来源:https://blog.csdn.net/AiTingDeTong/article/details/112062784
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )