MATLAB 摄像头视频获取和保存

MATLAB 摄像头视频获取和保存

一、读取摄像头视频

如题目,首先你需要有一个摄像头(usb或者本本自带的都可以)并且安装好了驱动,保证设备可以正常使用。

先来段简单的通过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)
复制代码
使用matlab调用摄像头拍照并发到邮箱-sendemail.m         之前在网上看到有用matlab调用摄像头的,也有用matlab发送电子邮件的,所以突发奇想,何不将这两者结合起来,即使用matlab先调用摄像头拍照,再将照片发到邮箱里面,如果能将程序编译成exe文件,然后利用windows系统的计划任务就可以实现定时拍照并上传到邮箱,这样如果笔记本电脑丢了的话,还可以将小偷的照片发到我邮箱,好疯狂的想法,下面我就介绍如何实现。(注:我的笔记本电脑配置环境:windows7旗舰版,matlab R2010a,带有摄像头) 1.将附件中的sendemail.m文件放到matlab的当前路径下,然后修改文件中的myaddress中的1111为你的发送方邮箱,mypassword中1s1s1s修改为发送方邮箱的密码,to中的2222修改为接收方邮箱,然后保存,先试着在matlab的命令窗口输入sendemail命令运行一下(运行之前要保证电脑已经联网),然后登陆到接收方邮箱中,查看是否收到一个主题为anti的邮件,其中有一个附件,名为anti.mat,然后下载该附件到matlab的当前路径下,然后在matlab命令窗口中输入一下命令,>>  load anti.mat >>  imshow,此时就应该显示你的照片了。 2.下面将m文件编译为exe文件,在编译之前先进行一项配置,就是设置运行编译生成的exe文件时不要出现黑框,在命令窗口中输入cd在下一行中输入edit lcccompp.bat,在出现的文件中的最后一行加上 set LINKFLAGS=%LINKFLAGS% -subsystem windows 然后保存文件并关闭,然后再将当前路径设置成原先的路径 接着在命令窗口输入mbuild -setup命令,出现如下语句,按下y键即可 Please choose your compiler for building standalone MATLAB applications: Would you like mbuild to locate installed compilers [y]/n? 之后出现选择编译器 Select a compiler: [1] Lcc-win32 C 2.4.1 in D:\MATLAB~1\sys\lcc [0] None 选择Lcc编译器前面的数字,比如按下1,在之后确定编译选项的询问中也输入y即可,完成之后,接着输入命令deploytool命令,出现附件中图片显示的窗口,重新命令一个名字,比如abc.prj,Location默认为当前路径,不需要改,Target选项选择Windows Standalone Application,然后点击OK,在出现的Deployment Tool页中单击Add main file,选择sendemail.m文件,然后单击deployment tool页中的Build按钮(总共只有三个按钮,试着自己找一下),接下来开始等待一段时间,可能有点长,如果出现编译finished,就表示编译成功了,可以关闭matlab了。 3.到matlab的当前路径下找到abc文件夹,进入找到子文件夹distrib,然后双击生成的exe文件,然后再到收件箱中查看是否收到邮件。 4.配置windows7的计划任务,让该exe程序定时运行 在桌面上右击“计算机”,单击管理,在出现的界面中左侧单击任务计划程序,在界面右侧单击“创建任务”,弹出创建任务对话框,为任务填个名称,添加描述,勾选隐藏,配置选为,windows7那一项,触发器选项卡中单击“新建”,选择“制定计划时”,“每天”,然后设置程序运行时间,勾选“启用”,确定。“操作”选项卡,单击新建,选择“启动程序”,单击“浏览”,选择distrib目录下生成的exe文件,确定。“条件”选项卡中只需勾选“只有在以下网络连接可用时才启动”,然后在下拉列表中选择“任何连接”(这个设置很重要,只有在电脑联网的情况下才能发送邮件,不是吗),确定。后面两个选项卡,自己看样子办。至此整个过程就介绍完了,你可以把计划任务中的时间设置成5分钟之后的时间,然后观察5分钟之后,你的邮箱是否收到了邮件。如果大家有什么不明白的地方,可以问我啊,我QQ  935351216
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值