MATLAB机器视觉工具箱安装及摄像头调用
说明
1.本文使用的MATLAB版本为R2018a。
2.本文适用于无法直接获取MATLAB硬件支持包的需求者。
3.本文安装离线安装包的方法或适用于其他支持包。
4.本文使用摄像头为LRCP USB摄像头。
5.本文提供的离线安装包支持到R2023a。
1.失败的安装过程
Matlab使用摄像头需要上述4个硬件支持包,一般的,前两个包需要重新下载安装。
方法一:
23年之前是可以直接从matlab主页-附加功能-获取硬件支持包,选择相应的硬件安装包安装。现在至少我的是不行的。因为一些懂得都懂的原因,我的附件功能资源管理器显示如下:
方法二:
从官网找到相应的安装工具usbwebcams.mlpkginstall与osgenericvideointerface.mlpkginstall。
点击“Get Support Package Now”,跳转到:
点击,跳转:
点击“Get”。下载了一个mlpkginstall文件。再点击文件就出现附加资源管理器了。本人无法成功!
还有一个mlpkginstall文件如下:
2.离线安装包安装教程
由于前两种,本人均无法成功,因此,本文使用第三种方法:安装离线支持包。
链接:https://pan.baidu.com/s/1fFNE6FdeQP9PtwRZ2CZbjQ?pwd=u692
提取码:u692
下载上述支持包,解压后文件夹如下:
双击support…文件,输入电子邮箱与密码(没有的先注册)。
选择需要安装的硬件版本,之后选“下一步”。
选择相应的安装包,这里选择“Image Acquisition…OS Generic Video …”与“MATLAB Support Package for USB Webcams”,点击“下一步”。
可以选择默认路径,但是我选择默认路径,后面操作没有用。
后面把安装包复制到matlab安装路径下的“/bin/win64”文件夹中才安装成功,所以这里可以直接安装在matlab安装路径下的“/bin/win64”文件夹中。之后无脑下一步,接受协议即可。安装完毕后进行下一步。
在matlab安装路径下的“/bin/win64”文件夹中搜索“support”,有博主说选择“SupportSoftwareInstaller.exe”,但是我这里选择这个是一片空白。这里我选择“install_supportsoftware.exe”。之后,直接安装即可。
安装完成后,就可以在附加功能中查看了。(可能需要重启MATLAB,图标如开头4个图片)
3.摄像头调用常用函数
1)webcamlist
使用该语句可以返回电脑的摄像头设备列表。这里返回值如下:
ans =
2×1 cell 数组
{'Integrated Camera'}
{'LRCP HD60fps' }
其中一般的,'Integrated Camera'表示电脑自带摄像头,'LRCP HD60fps'表示这里的电脑外接摄像头,其他摄像头是其他名字。
如果使用了GUIDE新建了一个弹出式菜单,可以通过下面语句将所有的摄像头设备读取到弹出式菜单进行选择。
set(handles.菜单tag, 'String',webcamlist);
2)webcam,videoinput与set
video1 = webcam(CamName);
一般的,使用上面语句可以获取视频对象,其中CamName表示摄像头编号或摄像头名。
preview(video1);
使用preview可以弹出窗口,显示获取的视频。最后使用clear可以清除对象。
video_obj = videoinput(adaptorname,deviceID,format);
video1 = videoinput('winvideo', CamAddr,'MJPG_1280x720');
其中adaptorname:适配器名称(必填,一般均为’winvideo’);deviceID:设备ID号或名称(必填);format:视频采集格式(不填写则使用默认)。
set(VideoObj,'ReturnedColorSpace','grayscale');
设置视频对象返回的颜色(如果是彩色摄像头),'grayscale'表示灰度,可以直接返回灰度视频,'rgb'表示彩色(red\green\blue),还可以是其他颜色。
3)getsnapshot更新慢的问题与imshow
Pic = getsnapshot(VideoObj);
imshow(Pic);
getsnapshot可以抓取视频对象的一帧,imshow显示图片。
单独使用getsnapshot(VideoObj)会消耗很多时间,这里有两种解决方法:
1.在使用getsnapshot(VideoObj)之前使用preview(VideoObj)将图片先显示,但是这会占用一个窗口;
2.在使用getsnapshot(VideoObj)之前使用如下代码:
triggerconfig(VideoObj,'manual'); start(VideoObj);
但是这样,必须在关闭后,调用delete(imaqfind)。
4.摄像头调用测试
测试代码如下:
delete(imaqfind); %关闭视频对象 CamName='LRCP HD60fps';%摄像头名称 % 获取图像硬件信息 info = imaqhwinfo; % 检查 InstalledAdaptors (适配器)是否为空 if isempty(info.InstalledAdaptors) % 构造提示消息 msg = sprintf(['检测到未安装图像硬件支持包\n', ... '请安装相应硬件支持包']); return; end ImageAdaptor=string(info.InstalledAdaptors);%将数组转化为字符串 try VideoObj=videoinput(ImageAdaptor,...%适配器名称 CamName,... %摄像头名称或编号 'MJPG_1280x720'); %新建视频对象 catch ME % 检查错误类型 switch ME.identifier case 'imaq:videoinput:invalidID' msgbox(sprintf(['未检测到摄像头\n'... '请连接摄像头并重试\n']),... '错误', 'error'); otherwise ME.identifier % 处理其他类型的错误 msgbox('发生了未知错误,请联系开发人员。',... '错误', 'error'); end return; end % 创建一个图形窗口 hFig = figure('Name', '摄像头预览',... 'NumberTitle', 'off'); % 在图形中创建坐标轴 hAx = axes('Parent', hFig); set(VideoObj,'ReturnedColorSpace','rgb'); %返回图片颜色 videoRes = get(VideoObj, 'VideoResolution'); nBands = get(VideoObj, 'NumberOfBands'); hImage = image(zeros(videoRes(2), videoRes(1), nBands),... 'parent',hAx); preview(VideoObj,hImage);
上述代码首先检测了是否安装了硬件支持包,如为安装则会弹出提示框并退出; 通过try-catch检测摄像头是否连接。最后,使用figure创建了一个窗口,使用axes函数在窗口中创建了一个坐标图,使用image与preview函数将摄像头获取的图像传到指定图上。
如果是GUIDE中的axes可以直接将hAx改为handles.axes1(axes的tag)。
参考文档:
1.解决MATLAB硬件支持包无法下载的问题_matlab stm硬件支持包-CSDN博客
2.Matlab上位机开发(四)Matlab获取自带摄像头或者USB摄像头数据-腾讯云开发者社区-腾讯云