如何使用Matlab调用笔记本摄像头 - Matlab计算机视觉与机器认知学习笔记 - 001
如何使用Matlab调用笔记本摄像头 - Matlab计算机视觉与机器认知学习笔记 - 001
如何使用Matlab调用笔记本摄像头
本文包括以下几点内容:
- 函数 imaqhwinfo 的介绍;
- 创建视频输入对象;
- 预览视频流及关闭;
- 获取图像、视频数据。
该笔记较多的参考了书本、他山之石以及个人实践,仅为个人学习笔记,起自我监督的作用。
如果有侵权,会尽快删除,请见谅!
1.函数 imaqhwinfo 的介绍及使用
了解该函数的最佳办法当属看MATLAB的文档:
https://ww2.mathworks.cn/help/imaq/imaqhwinfo.html?searchHighlight=imaqhwinfo&s_tid=doc_srchtitle
如果一下没看懂,也没事,可以TRANSLATE THIS PAGE.
函数 imaqhwinfo 主要是输出计算机有关图像采集硬件的信息。不输入任何参数时,该函数返回的是一个结构体,他包含了系统存在的适配器和MATLAB相关的版本信息。
info = imaqhwinfo %初次使用该函数时,可以不设定输入参数。 info = 包含以下字段的 struct: InstalledAdaptors: {} MATLABVersion: '9.6 (R2019a)' ToolboxName: 'Image Acquisition Toolbox' ToolboxVersion: '6.0 (R2019a)'
上面,我们是无法得知我们计算机有关图像获取的适配器的相关信息的,若要获取指定适配器的相关信息,还需要加上winvideo参数,如下所示
info = imaqhwinfo('winvideo')
但是如果你的显示了:
错误使用 imaqhwinfo (line 131) To use the 'winvideo' adaptor, install the OS Generic support package via Add-On Explorer.
那你就需要点击 Add-On Explorer去安装了,到第三步的时候可能会花费一两分钟时间,不要着急。
安装完成之后,重新输入如下:
imaqhwinfo('winvideo') ans = 包含以下字段的 struct: AdaptorDllName: 'C:\ProgramData\MATLAB\SupportPackages\R2019a\toolbox\imaq\supportpackages\genericvideo\adaptor\win64\mwwinvideoimaq.dll' AdaptorDllVersion: '6.0 (R2019a)' AdaptorName: 'winvideo' DeviceIDs: {[1]} DeviceInfo: [1×1 struct]
这里我们就通过了函数 imaqhwinfo 得到了我们适配器的名称,为接下来的摄像头的调用作下铺垫。
2.创建视频输入对象
通过 videoinput 函数创建视频输入对象,该函数有诸多参数可以指定适配器名称,设备编号,视频格式等。
vid = videoinput('winvideo') Summary of Video Input Object Using 'Lenovo EasyCamera'. Acquisition Source(s): input1 is available. Acquisition Parameters: 'input1' is the current selected source. 10 frames per trigger using the selected source. 'MJPG_1280x720' video data to be logged upon START. Grabbing first of every 1 frame(s). Log data to 'memory' on trigger. Trigger Parameters: 1 'immediate' trigger(s) on START. Status: Waiting for START. 0 frames acquired since starting. 0 frames available for GETDATA.
3.预览视频流及关闭
为了测试得到的视频是否满足实际的要求,我们需要先对其进行预览。
preview(vid) %建立在已经建立了上述vid变量的基础上的。
这样,就可以查看摄像头的实时录像了,如果想要关闭的话,使用函数close preview函数即可。
目前还是无法对图像进行保存的
4.获取图像、视频数据
获取图像数据是任何图像采集应用的核心,其过程分为三步:
- 启动视频输入对象
- 触发采集
- 获取数据(现使用的是matlab,即将数据采集到MATLAB工作区)
%% %打开摄像头代码 %调用视频摄像头 %语法:vid=videoinput(adaptorname,deviceID,format)(YUY2格式颜色发红) vid=videoinput('winvideo',1,'YUY2_640x480'); %设置TriggerRepeat重复地触发 set(vid, 'TriggerRepeat', Inf); %FramesPerTrigger每特定的帧数去触发捕获选定使用的视频源(FrameGrabInterval帧的抓取时间间隔) set(vid,'FramesPerTrigger',1); %设置返回色彩 rgb正常颜色,grayscale是灰度 set(vid,'ReturnedColorSpace','rgb'); %set(vid,'ReturnedColorSpace','grayscale');%如果想采集灰度图可取消注释 %获取分辨率,色彩数目等参数 %视频分辨率 vidRes=get(vid,'VideoResolution'); %色彩数目 nBands=get(vid,'NumberOfBands'); %himage:视频预览窗口对应的句柄,也就是说在指定的句柄对象中预览视频,该参数可以空缺。 %至于预览窗口的关闭和停止可以使用colsepreview和stoppreview函数 hImage=image(zeros(vidRes(2),vidRes(1),nBands)); preview(vid,hImage);
至此,我们已经获取、设定了图像采集各种参数,而且已经可以手动抓拍图片了,但是这个抓拍的仅仅是图片,还不能被保存到MATLAB的工作区域(当然可以被函数再次读进来)。
下面我们再对图和获取某个时刻摄像头中的画面和获取整个视频进行分别介绍和说明:
4.1. 获取某个时刻摄像头的画面
这个有两种办法,第一就是直接打开上述代码,然后手动点击保存按钮,即可随心自拍;
第二个办法通过代码实现,但是,你运行代码的时刻便是获取图像的时刻,但是可以直接将图像读进MATLAB工作区,且可随时调用。代码如下:
%% frame = getsnapshot(vid); figure; imshow(frame);
4.2. 获取整个视频
借用 VideoWrite 函数将摄像头各个时刻的画面连结起来组成视频,然后再保存:
%% %通过VideoWriter函数获取视频,并命名为test,格式为avi格式,也可以为mp4或者mj2。 writerObj = VideoWriter( ['test.avi'] ); %设置视频播放帧数,要是不设置就自动给为30了。 writerObj.FrameRate = 15; %对 VideoWriter 对象调用 open 函数后,将无法更改属性的值。因此,请在打开视频文件进行写入之前修改属性值。 %这里打开将要保存的视频 open(writerObj); for i = 1: 30 frame = getsnapshot(vid); imshow(frame); f.cdata = frame;%得到每一帧的RGB数据值 f.colormap = [];%设置颜色空间? writeVideo(writerObj,f);%将数据从数组f写入名为writerObj的文件,使用时必须先要有open(writerObj),才能写入。 end close(writerObj);%如果不关闭的话,是不会保存数据的。
OVER!
- 【学习笔记】【Cocos2d-x Lua脚本开发】如何使用Lua脚本调用自定义类
- 双目视觉学习笔记(一)--qtcreator下使用opencv读取并存储双摄像头图像
- 十、机器学习系统设计笔记之计算机视觉
- Excel学习笔记003-001:如何在VBA程序中调用Excel函数进行运算
- Qt5--学习笔记-调用笔记本电脑摄像头
- 【Oencv2计算机视觉学习笔记(二)】使用Qt创建GUI应用
- C语言学习笔记——如何使用全局变量
- [iphone 开发学习笔记]Object-C和C语言最大的区别也是最大的扩展-----消息(即如何调用一个对象中的函数)
- 学习Altas 笔记[js调用重载的方法出错,如何处理]
- 【原创】XNA 4.0学习笔记之-如何使用XACT给Cue添加多个音频
- Python学习笔记之疑问 9:如何使用For语句
- 学习Altas 笔记[js调用重载的方法出错,如何处理]
- 使用java调用hadoop接口学习笔记
- Boost asio学习笔记之一—— 使用strand支持多线程调用service_io的方法
- lua学习笔记 3 android调用Lua。Lua脚本使用LoadLib回调Java,并传多个参数
- (六)张正友标定法小结 【计算机视觉学习笔记--双目视觉几何架构系列】
- 张正友标定法 【计算机视觉学习笔记--双目视觉几何框架系列】
- MVC学习笔记之使用JQuery方式发送Ajax请求调用后台Controller
- Docker学习笔记(3)-- 如何使用Dockerfile构建镜像
- 初步探索如何使用Visual C#调用Matlab