曹海燕 秦文华 周崇波曲阜师范大学物理工程学院
MATLAB环境下摄像头的启动方法综述
曹海燕 秦文华 周崇波
曲阜师范大学物理工程学院
摘要:文章简单介绍了MATLAB软件在图像处理中的应用情况,及其功能、特点等。根据在MATLAB环境下启动摄像头的方法,对启动的不同方法及其获取的图像进行了说明。总结了在启动过程或是获取图像时容易出现的问题,并对问题进行分析与解答。对于目前启动摄像头获取图像的主要应用进行归纳。
关键字:MATLAB 启动摄像头 获取
MATLAB是由美国Mathwokrs公司发布的面向科学计算、数据可视化以及交互式程序设计的高技术计算语言。MATLAB经过多年的发展与竞争,现已成为国际公认的最优秀的科技应用软件之一。目前,MATLAB已经发展成了一系列的产品:MATLAB主包与各种工具箱。而且,公司针对不同领域的应用,推出了信号处理、控制系统、神经网络、图像处理、小波分析、鲁棒控制、非线性系统控制设计、系统辨识、通信等30多个具有专门功能的工具箱。正因其具有强大的功能,才使得其更好地运用在图像处理方面。MATLAB中的数字图是以矩阵形式表示,这意味着它强大的矩阵运算能力用于图像处理非常有利,矩阵运算的语法对MATLAB中的数字图像同样适用。图像处理操作包括读入图像、显示图像、处理图像和存储图像等几个部分。其中的图像可以是数据矩阵,也可以是颜色映射表矩阵,主要包含了4 种基本的图像类型:索引图像、灰度图像和二值图像。下面介绍在MATLAB环境下对摄像头的启动的图像处理的操作。
整个启动调用摄像头的过程需要以下几个步骤:1)查询摄像头的具体参数;2)创建视频输入对象;3)图像预览和显示;4)获取视频图像;5)图像获取设备的获取和设置;6)关闭视频对象。
1.1 启动摄像头的过程
1.1.1 查询摄像头的具体参数
在启动摄像头之前,我们需要知道使用的摄像头的具体参数才能进行编程。以USB 摄像头为例,在MATLAB环境下输入如下语句:info=imaqhwinfo,可以获取适配器的种类:‘gentl’,matrox’,‘winvideo’;版本:‘8.0(R2012b)’;工具箱名称:‘Image Acquisition Toolbox’ ;工具箱版本:‘4.4(R2012b)’ 。输入如下语句:d e v _ w i n _ i n f o = w i n _ i n f o . DeviceInfo,可以获取图像的默认格式,设备名称和获取的图像支持格式。
1.1.2 启动过程步骤及MATLAB语句
(1)创建视频输入对象。在info=imaqhwinfo,可以获取适配器的种类:‘gentl’ ,环境下启动摄像头时首先要做的是将摄像头与软件相连接,用到的主要参数videoinput ,创建视频输入对象的语句为:obj=videoinput(adaptorname,device ID,format),其中,adaptorname为适配器名称;deviceID 为设备ID号;format 为视频采集格式。
(2)打开视频预览窗口。创建视频连接,打开视频预览窗口,使用参数preview,其语句为:
himage=preview(obj,himage),其中,obj为视频采集对象;himage 为视频预览窗口对应的句柄。
(3)图像获取、显示和保存。视频预览窗口提供可供查看的视频,我们需要从视频中得到其中一帧的图像,并将图片显示与保存,其语句如下所示:frame=getsnapshot(obj);
imshow(frame);imwrite(frame,’M.jpg’,’jpg’);其中,frame是矩阵。
1.2 启动摄像头的基本MATLAB语句及效果图
在MATLAB 环境下启动摄像头的方法有许多种,并且根据其用途不同更有不同的方法,下面介绍三种不同的方法:1)单张图像的获取;2)多张图像的连续获取;3)多摄像头的启动。
(1)单张图像的获取。进行单张图像的捕捉、显示和保存时,首先输入如下代码,得到预览下的默认格式的摄像头捕捉窗口:
obj=videoinput(‘winvideo’,1);preview(obj);
在上述代码的基础之上输入以下代码得到MATLAB启动摄像头后获取的照片,并将照片以文件名M进行保存:frame=getsnapshot(obj);frame=ycbcr2rgb(frame);imshow(frame);imwrite(frame,’M.jpg’,’jpg’);
(2)多张图像的连续获取。在实际应用中,我们往往需要连续拍摄多张照片,比如在进行人脸追踪或是马路上安装的摄像头,这要求我们所要控制的摄像头要不间断地拍摄多张照片。此方法与单张图像的获取的不同之处在于,需要运用for循环语句或是while循环语句控制拍摄的图像张数,用定时器设定获取图像的时间间隔。下面介绍连续拍摄多张图像所用到的for循环语句。for ii=1:5a=getsnapshot(vid);
以上讲述的是关于多张图像的连续获取程序,在进行上述操作时,其中的for循环语句时连续获取5张图像的程序,可根据要求对其进行相应的修改获取不同数量的图像。
(3)多摄像头的启动。在MATLAB环境下可以启动单摄像头获取多张照片,也可以同时启动多个摄像头,我们以双摄像头为例来说明启动多摄像头的过程。双摄像头启动的应用非常广泛,如图像拼接、视频拼接和双目检测等。启动双摄像头是PC机上的两个摄像头进行同时开启,并同时获取图像,其启动过程与启动单摄像头的过程相似,首先创建视频输入对象,创建窗口,设置相应的参数等,其不同之处在于,在进行设置的过程中,无论是视频输入对象的创建还是各个窗口等的创建都是对于两个摄像头进行设置,而不是一个摄像头。并且,其中有可能碰到的问题是需要设置的两个摄像头,其型号是不一样的,这就要求我们在进行设置时要多加注意。首先在创建视频输入对象时,要根据实际情况(每台笔记本或是PC机自带的摄像头或是使用的USB摄像头其参数是不一样的)设定摄像头的格式,其主要是对参数formate进行设置;创建窗口时,主要是对视频预览窗口的按键进行设置,并且将两个摄像头的画面设置在一个窗口下;对两个摄像头进行参数的设置,其中包括两个摄像头的手柄、视频的分辨率、获取的图像的格式和获取图像的时间间隔等;界面设计,主要是对视频预览窗口中两个摄像头的位置及显示的图像的设计,其中有一项是界面的平移情况,一般要求将界面移到屏幕的中心位置,其语句为:movegui(figure_handle,‘center’)。
在MATLAB环境下启动摄像头时,有时会出现错误,下面针对其中出现的问题进行分析说明。
(1)MATLAB调用摄像头获取图片时,其视频窗口或是获取的图片颜色显示不正常,有时会出现红色失真或是灰度失真等问题,这些问题都与摄像头的参数有关,需要设置参数让其视频窗口显示正常,下面介绍一种红色失真的问题出现的原因及解决方法:截图的图片制式应为默认制式,有可能摄像头的默认制式是ycbcr制式,避免问题的出现可以在imshow之前加语句:frame=ycbcr2rgb(frame) ;进行转换。
(2)一般摄像头支持的默认分辨率为160 120,所以在编写MATLAB语句时,如果没有指出视频预览窗口及捕获照片的分辨率就会导致其分辨率不高,视频获取窗口很小,如图1 所示。针对这种情况可以在写语句时指定其分辨率,摄像头不同,其支持的分辨率就不同,一般有160 120、640 480等几种分辨率,可以根据需要修改语句,其matlab语句为:obj=videoinput(‘winvideo’,1,’YUY2_640 480’)。
(3)在多次运行程序时,会出现这样的错误,提示摄像头已使用。这种情况说明程序停止了,但是未关闭摄像头,应该关闭设备,运行语句stop 和delete,将设备停止再运行程序。(4)摄像头拍摄的照片格式为ycrcb格式的,要把它转换为rgb 格式才能显示正常。需要的语句为:a=getsnapshot(vid);a=ycbcr2rgb(a)。
(5)在视频窗口或是拍摄照片时会有一定的延时,其出现的原因及解决方法为:预览。预览可以解决延时问题,因为每次调用摄像头需要时间。
关于MATLAB软件及在其环境下启动摄像头的情况都有很多的应用,如:利用MATLAB调用摄像头可直接从摄像头实时采集图像,进行人脸识别;利用MATLAB调用双摄像头,进行双目检测;利用MATLAB调用摄像头拍照并发到邮箱;利用MATLAB调用摄像头实现间隔一段时间拍摄照片并进行保存的功能;利用MATLAB可以调用别台电脑上的摄像头并进行实时视频监控;利用MATLAB实现实时采集并制作视频;利用MATLAB搭建一个家庭监控系统。
MATLAB软件其功能强大,并且应用广泛,尤其是其在图像处理方面的应用。本文主要对MATLAB进行简单地介绍,针对MATLAB启动摄像头的一些情况进行了总结与分析,对其启动的方法与目前容易出现的问题及解决方案进行了综述,并总结了其主要的应用。
参考文献
[1] MathWorks,Lnc. Late-Breaking News for the 5.2 Product Family[M]. 1998: 3-9.
[2] 许志影,李晋平. Matlab及其在图像处理中的应用[J].计算机与现代化,2003(4): 64-65.
[3] 李了了,邓善熙. MATLAB在图像处理技术方面的应用[J].微计算机信息,2003,19(2):65-66.Washington,USA,2008:2347-2354.
[4] John P O,Brenda L S. Improving image quality in poor visibility conditions using a physical model for contrast degradation[C]//Proceedings of IEEE Transactions on Image Processing. Washington,USA,1998:167-179.
[5] 徐晶,刘鹏,唐降龙.大气光估计对单幅图像去雾复原的影响[J].智能计算机与应用,2012,2(3):68-71.
[6] He K M,Sun J,Tang X O. Guided image filtering[C]// Proceedings of IEEE Transactions on Pattern Analysis and Machine Intelligence. Washington,USA,2013: 1-13. [7] Levin A,Lischinski D,Weiss Y. A closed form solution to natural image matting[C]// Proceedings of IEEE Conference on Computer Vision and PatterRecogition. Washington,USA,2006: 61-68.
[8] 郭璠,蔡自兴,谢斌,等.单幅图像自动去雾新算法[J].中国图象图形学报,2011,16(4):516-521.