標籤:
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網路攝影機的編程