matlab摄像命令,如何使用MATLAB调用摄像头—代码详解

大家也可以加我的交流群,所有资料我会在群里分享出来哦:977947271

2020/5/30:

近日每天都有十几个很明显的小号加群,而且有的大号进群竟然打广告和卖不良物品,经我和群友讨论后,加群需要1元钱,但是进群后我会将钱退还给大家,只是为了过滤一些不好的人。

最近在做关于图像识别的项目。

接触了MATLAB的许多操作,在这里做下关于调用笔记本摄像头的笔记。

首先需要了解imaqhwinfo函数,在命令行输入imaqhwinfo就可以看到自己笔记本相关适配器和MATLAB版本的信息.但并不能看到摄像头的信息。

>>imaqhwinfo

ans =

包含以下字段的struct:

InstalledAdaptors: {'winvideo'}

MATLABVersion: '9.4 ( R2018a ) '

ToolboxName: 'Image Acquisition Toolbox'

ToolboxVersion: '5.4 (R2018a)'`

想要了解摄像头的信息就需要在imaqhwinfo中添加相关函数

>>imaqhwinfo('winvideo')

下面是适配器相关信息

ans =

包含以下字段的struct:

AdaptorDllName: 'C:\MATLAB\mwwinvideoimaq.dll'

AdaptorDllVersion: '5.4 (R2018)'

AdaptorName: 'winvideo'

DeviceIDs: {[1]}

DeviceInfo: [1×1 struct]

imaqhwinfo()返回的是一个结构体,其中 DeviceID 和 DeviceInfo比较重要。DeviceID 储存着电脑上所有可用摄像头的ID,每个ID对应着电脑可用的一个摄像头;DeviceInfo 里面储存着摄像头的信息,就是我们平时所说的视频格式。

下面以我的电脑为例:

使用 DeviceInfo.DeviceID 可以看到摄像头的 ID 为 1

>>I = imaqhwinfo('winvideo');

>>I.DeviceInfo.DeviceID

ans =

1

使用 DeviceInfo.SupportedFormats 函数可得到我的摄像头支持的格式是

{‘YUY2_160x120’} {‘YUY2_320x240’} {‘YUY2_640x480’}这三种。

>>I = imaqhwinfo('winvideo');

>>I.DeviceInfo.SupportedFormats

ans =

1×3cell 数组

{'YUY2_160x120'} {'YUY2_320x240'} {'YUY2_640x480'}

调用摄像头注意这个函数 videoinput(adaptorname,deviceID,format)

如果我使用ID为 ‘1’ 的摄像头,格式选择为{‘YUY2_640x480’},

那么代码为

videoinput('winvideo',1,'YUY2_640x480')

下面上简单的代码:

vid = videoinput('winvideo',1,'YUY2_640x480'); %选择摄像头和格式

preview (vid); %显示vid函数中摄像头拍摄的画面

frame = getsnapshot(vid); %获取每一帧的图片

figure;imshow(frame); %在figure中显示出摄像头拍摄的画面

%如果想保存图片可以使用下面的函数

%但这种函数保存打开摄像头那一瞬间的图片

%有时间我将介绍如何使用gui去实现随时拍照的代码,

imwrite(frame,'A.png');

下面是微微复杂点的代码,一般在实战中会用到,单纯是想玩的话,上面的代码已经够了。

obj = videoinput('winvideo',1,'YUY2_640×480');

%winvideo'由函数imaqhwinfo查出

set(vid,'FramesPerTrigger',1);

%FramesPerTrigger用特定的帧数去捕获选定的视频

set(vid, 'TriggerRepeat', Inf);

%不断地触发TriggerRepeat,以上代码一般不需要改动

set(vid,'ReturnedColorSpace','rgb');

%设置返回的视频颜色,‘rgb’是正常颜色,需要返回其他色彩可以在做改动

vidRes=get(obj,'VideoResolution');

%获得视频的长与宽,是二维数组

nBands=get(obj,'NumberOfBands');

%获得图像的颜色层数

hImage=image(zeros(vidRes(2),vidRes(1),nBands));

%获得图像的句柄

preview(obj,hImage);

%以上是我对这些代码的理解,具体情况在这里就没法细说了

这里就把简单的介绍完了。

建议有需要的朋友使用GUI去实现对视频、图片的播放、保存、并做相应处理的操作。

有时间我会把我的项目再深入介绍一下如何对这些进行操作,如果有感兴趣的朋友也可以联系我。