前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matlab上位机开发(四)Matlab获取自带摄像头或者USB摄像头数据

Matlab上位机开发(四)Matlab获取自带摄像头或者USB摄像头数据

作者头像
Mculover666
发布2020-07-16 14:22:33
6.8K1
发布2020-07-16 14:22:33
举报
文章被收录于专栏:TencentOS-tinyTencentOS-tiny

1. 两种获取摄像头的方式

Matlab自身不支持直接读取摄像头数据,需要安装硬件支持包才可以获取,目前常用的有两个包:

第一个是 MATLAB Support Package for USB Webcams,这个包可以获取任何USB摄像头的图像(UVC),也可以获取电脑自带摄像头的数据,兼容 R2014a 到 R2020a 的版本。

第二个是Image Acquisition Toolbox Support Package for OS Generic Video Interface,更加通用,它也兼容 R2014a 到 R2020a 的版本。(推荐)

2. 使用Image Acquisition Toolbox

2.1. 安装硬件支持包

首先执行这条命令打开摄像头,测试是否可以调用videoinput函数:

代码语言:javascript
复制
video_source = videoinput('winvideo',1)

如果出现图中的错误,那么恭喜你,需要手动安装硬件支持包了。

点击获取附加功能中的获取硬件支持包:

按照图中所示找到该支持包:

安装支持包:

这个安装之前需要登录Matlab账号,安装过程也比较慢。

2.2. 玩转摄像头

① 查看电脑上已经安装的图像适配器 Matlab的图像获取工具箱(第一步安装的硬件支持包)中提供了函数,可以获取查询当前PC上已经连接的摄像头信息,函数如下:

代码语言:javascript
复制
imaqhwinfo()

其中InstalledAdaptors的值给出了当前电脑上已经安装的摄像头适配器个数,这里我的电脑上只有一个:winvideo

② 查看摄像头设备具体参数 使用该命令查看上一步获取到的图像适配器的具体参数:

代码语言:javascript
复制
win_info = iimaqhwinfo('winvideo')

可以看到其中给出了该图像适配器具体的一些参数,特别需要注意的是,该函数返回了连接在当前图像适配器winvideo上的所有摄像头的设备ID和设备信息

当前我的电脑上一共有两个摄像头,一个是笔记本电脑内置的摄像头,另一个是我连接的USB 2.0 摄像头,接下来以USB摄像头为例,说明如何查看摄像头的设备ID和具体信息:

在工作区找到保存信息的变量win_info,双击查看其值:

可以看到,两个摄像头的设备ID分别为1和2,一般来说,电脑内置的摄像头的ID为1。

同样,双击win_info.DeviceInfo变量,可以查看摄像头的具体参数:

这里摄像头支持的格式有40多种,不方便查看,我们可以在命令行查看:

代码语言:javascript
复制
win_info.DeviceInfo.SupportedFormats

③ 创建视频输入对象

使用如下的命令来创建一个视频输入对象:

代码语言:javascript
复制
video_obj = videoinput(adaptorname,deviceID,format)

该函数的三个参数说明如下:

  • adaptorname:适配器名称(必须)
  • deviceID:设备ID号(必须)
  • format:视频采集格式(不填写则使用默认)

如下,我要创建USB摄像头的视频输入对象:

代码语言:javascript
复制
video_obj = videoinput('winvideo',2)

④ 预览视频对象 使用如下命令即可预览视频对象,该函数会自动打开一个窗口,播放摄像头画面:

代码语言:javascript
复制
preview(video_obj)

3. 使用USB Webcams包

3.1. 安装硬件支持包

点击获取附加功能中的获取硬件支持包:

按照图中所示找到该支持包:

安装支持包:

这个包不需要授权,只需要安装之前登录Matlab账号即可,安装过程非常快。

3.2. 玩转摄像头

① 查看当前摄像头设备列表

代码语言:javascript
复制
webcamlist

需要注意,使用webcam的时候,下标从1开始,1对应USB Camera,2对应Integrated Camera。

② 获取视频对象 一行代码即可获取,非常舒服,比如获取外接USB摄像头的输入对象:

代码语言:javascript
复制
cam1 = webcam(1)

同样可以获取电脑自带摄像头的输入对象:

代码语言:javascript
复制
cam1 = webcam(2)

③ 预览视频对象 使用如下命令即可预览视频对象,该函数会自动打开一个窗口,播放摄像头画面:

代码语言:javascript
复制
preview(cam1)

④ 查看摄像头支持的分辨率并修改:

代码语言:javascript
复制
<刚刚获取的设备对象>.AvailableResolutions

然后根据修改为需要的分辨率:

代码语言:javascript
复制
<刚刚获取的设备对象>.Resolution = <指定的分辨率>

再次preview之后即可看到分辨率改变。

⑤ 用完之后清除对象

代码语言:javascript
复制
clear <刚刚获取的对象>

4. 在GUI中显示视频流并拍照

在Gui界面中显示视频流尽量使用Image Acquisition Toolbox。

4.1. 拖动控件,设计界面

在命令行输入guide启动设计界面,新建一个设计文件。

设计的界面如下:

4.2. 实时显示摄像头画面

点击开启按钮后,在第一个坐标区实时显示摄像头画面,回调函数代码如下:

首先创建一个全局的视频输入对象:

代码语言:javascript
复制
global video_obj;
video_obj = videoinput('winvideo', 2, 'YUY2_640x480');

然后设置图像格式为RGB:

代码语言:javascript
复制
set(video_obj,'ReturnedColorSpace','rgb');

获取视频输入对象的信息,用于在坐标区显示:

代码语言:javascript
复制
videoRes = get(video_obj, 'VideoResolution');
nBands = get(video_obj, 'NumberOfBands');

转换,将视频输入对象与坐标区控件关联起来:

代码语言:javascript
复制
hImage = image(zeros(videoRes(2), videoRes(1), nBands),'parent',handles.axes1);

开始显示:

代码语言:javascript
复制
preview(video_obj,hImage);
start(video_obj);

完整的代码如下:

代码语言:javascript
复制
global video_obj;
video_obj = videoinput('winvideo', 2, 'YUY2_640x480');
set(video_obj,'ReturnedColorSpace','rgb');
videoRes = get(video_obj, 'VideoResolution');
nBands = get(video_obj, 'NumberOfBands');
hImage = image(zeros(videoRes(2), videoRes(1), nBands),'parent',handles.axes1);
preview(video_obj,hImage);
start(video_obj);

接下来启动后,点击开启按钮,就可以在第一个坐标区看到摄像头实时画面了。

4.3. 关闭摄像头实时显示

点击关闭按钮后,关闭在第一个坐标区实时显示的摄像头画面,回调函数代码如下:

代码语言:javascript
复制
global video_obj;
stop(video_obj);
closepreview(video_obj);
delete(video_obj);

接下来启动后,点击关闭按钮,就可以关闭在第一个坐标区看到摄像头实时画面了。

4.4. 拍照(抓取画面)

点击拍照按钮,即可抓取当前视频流的画面,显示在第二个坐标区控件,回调函数代码如下:

代码语言:javascript
复制
global video_obj
mypic = getsnapshot(video_obj);
axes(handles.axes2);
imshow(mypic);

如果需要对抓取的图片进行处理,则将图片变量mypic设为全局变量!

启动后即可看到效果。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Mculover666 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 两种获取摄像头的方式
  • 2. 使用Image Acquisition Toolbox
    • 2.1. 安装硬件支持包
      • 2.2. 玩转摄像头
      • 3. 使用USB Webcams包
        • 3.1. 安装硬件支持包
          • 3.2. 玩转摄像头
          • 4. 在GUI中显示视频流并拍照
            • 4.1. 拖动控件,设计界面
              • 4.2. 实时显示摄像头画面
                • 4.3. 关闭摄像头实时显示
                  • 4.4. 拍照(抓取画面)
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档