[轉]使用MATLAB進行USB網路攝影機的編程

來源:互聯網
上載者:User

標籤:

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);

[轉]使用MATLAB進行USB網路攝影機的編程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.