调用Matlab摄像头函数,拍照并保存

一、读取摄像头视频

如题目,首先你需要有一个摄像头(usb或者本本自带的都可以)并且安装好了驱动,保证设备可以正常使用。最近有好多人问我,我把我针对这个代码修改的在10秒钟内截取100张图片的代码也贴在后面了,供大家参考。

先来段简单的通过MATLAB显示摄像头视频的代码:

 

1 vid = videoinput('winvideo',1);
2 preview(vid);

 

通过上面两段代码就可以看到摄像头里面的画面。

第1代码是通过videoinput()创建视频输入对象,第2行显示所创建的视频对象,就这么简单是不。

看到的画面是彩色的吧,如果想体验一下熊猫的视觉观怎么办。加命令呗:

 

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

 

变回原来的彩色世界,只需要把 set 里面设置属性的参数‘grayscale’ 改为 ‘rgb’ 就OK。

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

 

二、获取某时刻摄像头中的画面

直接上代码:

1 frame = getsnapshot(vid);
2 figure;imshow(frame);

getsnapshot(vid)得到表示视频对象vid当前时刻画面的图像矩阵。

 

三、保存视频

保存视频的原理其实是把摄像头中各个时刻的画面连接起来组成视频,然后对其进行保存。

复制代码
 1 writerObj = VideoWriter( [filename '.avi'] );
 2 writerObj.FrameRate = N;
 3 open(writerObj);
 4 
 5 figure;
 6 for ii = 1: nframe
 7     frame = getsnapshot(vid);
 8     imshow(frame);
 9     f.cdata = frame;
10     f.colormap = [];
11     writeVideo(writerObj,f);
12 end
13 
14 close(writerObj);
复制代码

第1行中通过VideoWriter()函数创建 filename.avi 的视频文件,第二行设置视频文件的帧率(每秒钟的帧数)。

剩下的就是通过 <读取——写入>的过程录制视频了。保存视频的m函数写好啦,在第四部分可以找到下载链接。

 

四、深入了解

如果运行开始的两行命令就报错,那就继续往下看吧。

如果有了前面的命令你觉得足够了,下面就不用看了。

1.知己知彼:了解摄像头的属性

 

cam_info = imaqhwinfo('winvideo');

imaqhwinfo()函数返回的是一个结构体,里面比较重要的是 DeviceID 和 DeviceInfo。DeviceID存储着电脑上所有可用摄像头的ID,每个ID对应一个摄像头。DeviceInfo中存储着每个摄像头的信息,这里面我们最关心的就是摄像头所支持的视频格式。以我的usb摄像头为例,通过下面代码,得到摄像头的ID和支持的视频格式:

 

cam_info = imaqhwinfo('winvideo');
cam_info.DeviceInfo.DeviceID
cam_info.DeviceInfo.SupportedFormats 

得到摄像头的ID为:1

对应的的五种视频格式:

'YUY2_160x120'    'YUY2_176x144'    'YUY2_320x240'    'YUY2_352x288'    'YUY2_640x480'

如果有多摄像头的话,那就每个ID对应相应的视频格式。

 

知道每个摄像头的具体参数后,就可以创建我们需要的摄像头的视频对象了,把前面<一>中的代码改为:

 

vid = videoinput('winvideo',1,'YUY2_640x480');

上面就是创建ID为1的摄像头的视频对象,视频格式是 YUY2_640x480,这表示视频的分辨率为640x480。

 

开始的准备工作就这些,结合前面所讲的,下面贴一个 <读取-显示-保存>的例子。文中需要调用的MakeVideo.m文件在这里。

复制代码
1 clear all; clc
2 closepreview
3 vid = videoinput('winvideo',1,'YUY2_640x480');
4 preview(vid);
5 filename = 'film';
6 nframe = 120;       
7 nrate = 30;
8 MakeVideo(vid, filename, nframe, nrate, 1)
复制代码

 

a = imaqhwinfo
如果运行出现错误,请先安装工具箱,具体啥工具箱以下给出详解

警告: No Image Acquisition adaptors found. Image acquisition adaptors may be available as downloadable support packages. Open Support Package Installer to install additional vendors.这时候Support Package Installer在MATLAB里面有下划线,然后你点开它,MATLAB会提供大概13个软件包,这时候选择OS Generic Video Interface下载安装就OK了


下面是我的代码和效果图:

 
   

% function camera % 100个正常的 & 100个戴眼镜的 & 100个戴帽子的 & 100个眼镜+帽子的 & 100个杂物的 vid = videoinput('winvideo',1, 'YUY2_640x480'); set(vid,'ReturnedColorSpace','rgb'); preview(vid); tic; i = 1; while 1 frame = getsnapshot(vid); imshow(frame); imwrite(frame,strcat(num2str(i),'.jpg'),'jpg'); i = i+1; if i >= 101 break; end end toc;


 

纸上得来终觉浅,绝知此事要躬行


你可能感兴趣的:(机器学习)