1、安裝配接器
(1)如果沒有安裝配接器,那么在命令列輸入 ‘imaqhwinfo’ ,將會報錯,然后直接點擊錯誤中的鏈接,去下載一個配接器,這個程序需要注冊一個Matlab賬號,
(2)安裝成功之后在命令列輸入:
obj = imaqhwinfo
會得到一個結構體,是配接器的相關資訊,比如我的就為:
obj =
包含以下欄位的 struct:
InstalledAdaptors: {'winvideo'}
MATLABVersion: '9.6 (R2019a)'
ToolboxName: 'Image Acquisition Toolbox'
ToolboxVersion: '6.0 (R2019a)'
可以看到,我的配接器名稱為’winvideo’,
(3)命令列輸入:
obj = imaqhwinfo('winvideo')
同樣可以得到一個結構體:
obj =
包含以下欄位的 struct:
AdaptorDllName: 'C:\ProgramData\MATLAB\SupportPackages\R2019a\toolbox\imaq\supportpackages\genericvideo\adaptor\win64\mwwinvideoimaq.dll'
AdaptorDllVersion: '6.0 (R2019a)'
AdaptorName: 'winvideo'
DeviceIDs: {[1] [2] [3]}
DeviceInfo: [1×3 struct]
可以看到,DeviceIDs 有3個,這是因為我插了兩個USB攝像頭,同時還有筆記本自帶的攝像頭,Matlab給這三個攝像頭分別分配一個ID,以此來進行區分,
2、單攝像頭的呼叫
Matlab中呼叫攝像頭實際上很簡單,利用 ‘Image Acquisition Toolbox’ 即可,
(1)創建 videoinput 物件,函式句法為:
obj = videoinput(adaptorname,deviceID,format)
這里我采用 ‘winvideo’ 配接器,同時從 DeviceID = 1 的設備,以默認格式獲取資料,
obj = videoinput('winvideo',1);
(2)進行視頻的預覽:
obj = videoinput('winvideo',1);
preview(obj);
可以直接從視窗中看到實時視頻:

(3)圖片的保存
obj = videoinput('winvideo',1);
preview(obj);
pause(0.1);%如果不延遲的話,拍出來的照片有點糊,因為相機還沒對焦好,可以根據個人情況選擇,
im = getsnapshot(obj);%抓取obj物件當前的一幀,
imwrite(im,'Photo.jpg');%將圖片保存在當前檔案夾里,
delete(obj);%程式任務完成后洗掉物件,釋放空間,
(4)視頻的保存
obj = videoinput('winvideo',1);
set(obj,'TriggerRepeat',Inf);%捕獲次數設為無窮大,表示一直重復捕獲,直到出現錯誤或記憶體不夠,
set(obj,'FramesPerTrigger',1);%每次捕獲放進緩沖區的幀數,
preview(obj);%打開視頻預覽視窗,在視窗中可以看到視頻的FPS,即Frames Per Second
writerObj = VideoWriter( ['test.avi'] );%將視頻保存在當前檔案夾下
writerObj.FrameRate = 15;%這個幀數要自己設定為和FPS保持一致,這決定了寫視頻檔案的時候,每一秒有多少幀圖片,如果這個值設定的和FPS不匹配,那么最終保存的視頻會類似于開了倍速一樣,
open(writerObj);%打開物件之后才能往進寫資料幀,
start(obj)%obj物件開始捕獲
for i = 1:150 %將捕獲的前150幀保存為視頻,根據上面FrameRate可以算出,視頻長為10秒,
frame = getdata(obj);
writeVideo(writerObj,frame);
end
close(writerObj);%關閉物件,即完成視頻的保存,
delete(obj);
3、兩個攝像頭同時呼叫
將單個攝像頭的代碼中的物件分別設定兩個即可,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/243662.html
標籤:其他
