如何使用MATLAB调用摄像头—代码详解

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

接触了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去实现对视频、图片的播放、保存、并做相应处理的操作。

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

发布了7 篇原创文章 · 获赞 10 · 访问量 2698

猜你喜欢

转载自blog.csdn.net/qq_45504119/article/details/104357049