zoukankan      html  css  js  c++  java
  • [转]使用MATLAB进行USB摄像头的编程

    http://blog.csdn.net/linxue968/article/details/6047376

    1、查询USB2.0Camera 的具体参数(imaqhwinfo)

    2、创建视频输入对象(videoinput)

    3、图像预览和显示(preview、stoppreview、closepreview和image)

    4、获取视频图像(getsnapshot)

    5、图像获取设备的获取和设置(get和set)

    6、关闭视频对象(delete)

    在正式讲解之前,我想说明下几个个在图像获取工具箱中的术语:

    图像获取设备:比如摄像头、扫描仪

    图像获取适配器:主要的目的是通过驱动在Matlab和图像获取设备之间传递信息

    ROI:region-of-interest 感兴趣区域

    在说说几个常用的函数,我们这里只是说明它的作用,具体如何使用参考帮助系统

    getselectedsource

    imaqfind

    isvalid

    peekdata

    getdata

    imaqmontage

    给我们一个摄像头我们必须知道他的相关参数,才可能进行我们的编程下。当然我们可以查询商家手册,但是那个累不累人呀。

    Matlab的图像获取工具箱为我提供了imaqhwinfo(),来获取PC上以安装的图像获取硬件信息

    没有输入参数时,返回一个结构体, 它包含了系统中存在的适配器和Matlab相关的版本信息(第一次我们一般使用这个)

    代码:

    >> info=imaqhwinfo

    info =

        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.DeviceIDs

    ans =

        [1]

    >> dev_win_info=win_info.DeviceInfo

    dev_win_info =

              DefaultFormat: 'RGB24_320x240'%获取图片的默认格式

        DeviceFileSupported: 0

                 DeviceName: '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_352x288'    'I420_640x480'

      Columns 6 through 9

        'RGB24_1280x960'    'RGB24_160x120'    'RGB24_176x144'    'RGB24_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()%指定预览窗体显示的figure

    axes()%指定预览窗口显示的坐标系

    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: 0

    DeviceName: 'USB 视频设备'

    DeviceID: 1

    ObjectConstructor: 'videoinput('winvideo', 1)'

    SupportedFormats: {1x5 cell}

    输入device1 = winvideoinfo.DeviceInfo(1)

    返回信息

    device1 =

    DefaultFormat: 'YUY2_160x120'

    DeviceFileSupported: 0

    DeviceName: 'USB 视频设备'

    DeviceID: 1

    ObjectConstructor: '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_352x288'

    Column 5

    'YUY2_640x480'

    2、 最简单采集实验,输入如下代码,可以得到预览下的默认格式的摄像头捕捉窗口obj=videoinput('winvideo',1);

    preview(obj);

    3、 输入如下代码

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

    sources = vidobj.Source;

    whos sources

    set(vidobj,'SelectedSourceName','input1');

    sources

    selectedsrc = getselectedsource(vidobj);

    get(selectedsrc);

    delete(vidobj);

    clear vidobj;

    返回信息

    Name          Size                    Bytes Class

    sources       1x1                       726 videosource object

    Grand total is 30 elements using 726 bytes

    Display Summary for Video Source Object:

    Index:   SourceName:   Selected:

    1        'input1'      'on'

    General Settings:

    Parent = [1x1 videoinput]

    Selected = on

    SourceName = input1Tag =

    Type = videosource

    Device Specific Properties:

    BacklightCompensation = on

    Brightness = -16

    Contrast = 120

    FrameRate = 30.0000

    Gamma = 60

    Hue = 0

    Saturation = 40

    Sharpness = 3

    4、 输入如下代码

    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为0

        imshow(a);                   %显示图像

        drawnow;                     % 实时更新图像

    end;

    delete(vid);

  • 相关阅读:
    什么是web标准、可用性、可访问性
    前端面试>逻辑推理题~~
    git 安装
    wcf生成客户端代理的四种方法
    mysql 安装
    理解Linux 的处理器负载均值load averages
    高性能服务器架构
    事务日志
    Epoll工作模式详解
    事务和两阶段提交
  • 原文地址:https://www.cnblogs.com/esta-pessoa/p/5426466.html
Copyright © 2011-2022 走看看