当前位置:文档之家› 读取usb摄像头的程序简介

读取usb摄像头的程序简介

使用MATLAB进行USB摄像头的编程编程 2009-05-19 08:52:07 阅读475 评论0 字号:大中小订阅在CSDN上看了一篇“如何使用MATLAB进行USB2.0摄像头的编程”的博文,感觉不错,现转摘如下:整个过程我们需要做如下几件事情:1、查询USB2.0Camera 的具体参数(imaqhwinfo)2、创建视频输入对象(videoinput)3、图像预览和显示(preview、stoppreview、closepreview和image)4、获取视频图像(getsnapshot)5、图像获取设备的获取和设置(get和set)6、关闭视频对象(delete)在正式讲解之前,我想说明下几个个在图像获取工具箱中的术语:图像获取设备:比如摄像头、扫描仪图像获取适配器:主要的目的是通过驱动在Matlab和图像获取设备之间传递信息ROI:region-of-interest 感兴趣区域在说说几个常用的函数,我们这里只是说明它的作用,具体如何使用参考帮助系统getselectedsourceimaqfindisvalidpeekdatagetdataimaqmontage给我们一个摄像头我们必须知道他的相关参数,才可能进行我们的编程下。

当然我们可以查询商家手册,但是那个累不累人呀。

Matlab的图像获取工具箱为我提供了imaqhwinfo(),来获取PC上以安装的图像获取硬件信息没有输入参数时,返回一个结构体,它包含了系统中存在的适配器和Matlab相关的版本信息(第一次我们一般使用这个)代码:>> info=imaqhwinfoinfo =InstalledAdaptors: {'coreco' 'winvideo'}%这里可以看到我的PC 上安装了两个适配器MATLABVersion: '7.6 (R2008a)'ToolboxName: 'Image Acquisition Toolbox'ToolboxVersion: '3.1 (R2008a)'有输入参数的时候,返回一个结构体,包含了指定的适配器的数据信息代码:>> win_info=imaqhwinfo('winvideo')%我们看看第二适配器的具体参数win_info =AdaptorDllName: [1x81 char]%适配器dll文件绝对路径AdaptorDllVersion: '3.1 (R2008a)'%适配器dll文件版本AdaptorName: 'winvideo'%s适配器名称DeviceIDs: {[1]}%设备ID号,这个我们经常需要用到DeviceInfo: [1x1 struct]%设备信息,这里主要是图像获取设备的一些参数,比较重要%====================下面我们了解下,这个图像获取设备到底有哪些的详细信息吧====================>> win_info.DeviceIDsans =[1]>> dev_win_info=win_info.DeviceInfodev_win_info =DefaultFormat: 'RGB24_320x240'%获取图片的默认格式DeviceFileSupported: 0DeviceName: 'USB PC CAMERA P227'%设备名称DeviceID: 1%设备号ObjectConstructor: 'videoinput('winvideo', 1)'%对象构建方式,这个绝大部分都是一样的SupportedFormats: {1x12 cell}%获取的图像支持格式,一般都有好多种,上面的DefaultFormat只是默认格式而已%==================================看看图像获取设备支持的图像格式==================================>> dev_win_info.SupportedFormats%可以看到我的PC上的摄像头支持下面12中图片格式ans =Columns 1 through 5'I420_160x120' 'I420_176x144' 'I420_320x240' 'I420_3 52x288' 'I420_640x480'Columns 6 through 9'RGB24_1280x960' 'RGB24_160x120' 'RGB24_176x144' 'RG B24_320x240'Columns 10 through 12'RGB24_352x288' 'RGB24_640x480' 'RGB24_800x600'视频预览、采集和保存(1)创建视频输入对象obj = videoinput(adaptorname,deviceID,format)adaptorname:适配器名称,首次可以使用不带参数的imaqhwinfo函数获取deviceID:设备ID号,首次可以通过imaqhwinfo函数获取format:视频采集格式,可以通过DeviceInfo的SupportedFormats获取,不填写则使用默认格式代码:>> obj = videoinput('winvideo',1,'RGB24_320x240')%这里我们使用默认的视频采集格式Summary of Video Input Object Using 'USB PC CAMERA P227'.Acquisition Source(s): input1 is available.Acquisition Parameters: 'input1' is the current selected source.10 frames per trigger using the selected source.'RGB24_320x240' video data to be logged upon START.Grabbing first of every 1 frame(s).Log data to 'memory' on trigger.Trigger Parameters: 1 'immediate' trigger(s) on START.Status: Waiting for START.0 frames acquired since starting.0 frames available for GETDATA.(2)打开视频预览窗口himage=preview(obj,himage)obj:视频采集对象himage:视频预览窗口对应的句柄,也就是说在指定的句柄对象中预览视频,该参数可以空缺至于预览窗口的关闭和停止可以使用colsepreview和stoppreview函数代码:vidRes = get(obj, 'VideoResolution');nBands = get(obj, 'NumberOfBands');figure()%指定预览窗体显示的figureaxes()%指定预览窗口显示的坐标系hImage = image( zeros(vidRes(2), vidRes(1), nBands) );preview(obj, hImage);(3)图像捕捉、显示和保存代码:%frame是H×W×B的矩阵。

H图像高度,由ROIPosition指定;w图像宽度,由ROIPosition指定;B索线个数,由NumberOfBands指定frame = getsnapshot(obj);imshow(frame);imwrite(fame,'snap.jpg','jpg');实验步骤1、查询USB2.0Camera 的具体参数输入 imaqInfo = imaqhwinfo返回信息InstalledAdaptors: {'winvideo'}MATLABVersion: '7.1 (R14SP3)'ToolboxName: 'Image Acquisition Toolbox'ToolboxVersion: '1.9 (R14SP3)'输入imaqInfo.InstalledAdaptors返回信息ans ='winvideo'输入winvideoinfo = imaqhwinfo('winvideo')返回信息winvideoinfo =AdaptorDllName: [1x76 char] AdaptorDllVersion: '1.9 (R14SP3)' AdaptorName: 'winvideo'DeviceIDs: {[1]}DeviceInfo: [1x1 struct]输入 winvideoinfo.DeviceInfo返回信息ans =DefaultFormat: 'YUY2_160x120' DeviceFileSupported: 0DeviceName: 'USB 视频设备'DeviceID: 1ObjectConstructor: 'videoinput('winvideo', 1)' SupportedFormats: {1x5 cell}输入device1 = winvideoinfo.DeviceInfo(1)返回信息device1 =DefaultFormat: 'YUY2_160x120' DeviceFileSupported: 0DeviceName: 'USB 视频设备'DeviceID: 1ObjectConstructor: 'videoinput('winvideo', 1)'SupportedFormats: {1x5 cell}输入device1.DeviceName返回信息ans =USB 视频设备输入device1.DeviceID返回信息ans =1输入device1.DefaultFormat返回信息ans =YUY2_160x120输入device1.SupportedFormats返回信息Columns 1 through 4'YUY2_160x120' 'YUY2_176x144' 'YUY2_320x240' 'YUY2_352x2 88'Column 5'YUY2_640x480'2、最简单采集实验,输入如下代码,可以得到预览下的默认格式的摄像头捕捉窗口obj=videoinput('winvideo',1);preview(obj);3、输入如下代码vidobj = videoinput('winvideo',1,'YUY2_640x480');sources = vidobj.Source;whos sourcesset(vidobj,'SelectedSourceName','input1');sourcesselectedsrc = getselectedsource(vidobj);get(selectedsrc);delete(vidobj);clear vidobj;返回信息Name Size Bytes Classsources 1x1 726 videosource object Grand total is 30 elements using 726 bytesDisplay Summary for Video Source Object:Index: SourceName: Selected:1 'input1' 'on'General Settings:Parent = [1x1 videoinput]Selected = onSourceName = input1Tag =Type = videosourceDevice Specific Properties:BacklightCompensation = onBrightness = -16Contrast = 120FrameRate = 30.0000Gamma = 60Hue = 0Saturation = 40Sharpness = 34、输入如下代码clc;clf;clear all;imaqmem(30000000); %申请内存空间%ADAPTOR:MATLAB与视频设备之间的接口,主要的目的是传递信息vid = videoinput('winvideo', 1, 'YUY2_640x480');preview(vid);start(vid);h=figure('NumberTitle','off','Name','视频',...'MenuBar','none','color','c',...'Position', [0, 0, 1, 1], 'Visible', 'on'); %新建窗口set(h,'doublebuffer','on','outerposition',get(0,'screensize'));h1=axes('Position', [0.02, 0.1, 0.4, 0.8],'Parent',h); %新建显示窗口hold on;axis off;while ishandle(h) %判断是否有效的图像对象句柄a=getsnapshot (vid); % 捕获图像flushdata(vid); %清除数据获取引擎的所有数据、置属性SamplesAvailable为0imshow(a); %显示图像drawnow; % 实时更新图像end;delete(vid);。

相关主题