2012-01-17 93 views
3

getsnapshot函數需要大量的時間執行,因爲(我猜)每次調用時都會初始化網絡攝像頭。如果您想要以較高的幀率採集圖像,這是一個問題。getsnapshot加速

我欺騙我隨口發現是調用preview功能,這使網絡攝像頭處理程序打開使得getsnapshot幾乎是瞬間的,但它使一個小的預覽窗口中打開:

% dummy example 
cam = videoinput(...); 
preview(cam); 

while(1) 
    img = getsnapshot(cam); 
    % do stuff 
end 

是否有一個「乾淨」的方式加快getsnapshot? (不打開預覽窗口)

回答

4

您可以使用專爲視覺應用程序專門構建的新「機器視覺」工具箱。見下面的代碼:

vid = videoinput('winvideo', 1, 'RGB24_320x240'); %select input device 

hvpc = vision.VideoPlayer; %create video player object 

src = getselectedsource(vid); 
vid.FramesPerTrigger =1; 
vid.TriggerRepeat = Inf; 
vid.ReturnedColorspace = 'rgb'; 
src.FrameRate = '30'; 
start(vid) 

%start main loop for image acquisition 
for t=1:500 
    imgO=getdata(vid,1,'uint8'); %get image from camera 
    hvpc.step(imgO); %see current image in player 
end 

正如你所看到的,你可以用getdata獲取圖像。 Matlab中視頻應用程序的瓶頸是預覽窗口,該窗口大大延遲了編碼。全新的Vision.VideoPlayer是很多更快(我已經使用這個代碼在Matlab中的實時視覺應用程序。當我寫了沒有視覺工具箱的第一個版本,實現幀速率約18 fps和使用新的工具箱到70左右!)。

注:我需要使用Matlab的圖像應用程序的速度,你應該真的考慮通過mex使用OpenCV庫來獲得一個體面的圖像處理性能。

+0

當我鍵入'videoinput'或'getdata'時,它表示它是未定義的函數,它是從哪裏來的? – 2017-10-08 18:43:06

+0

https://www.mathworks.com/help/imaq/videoinput.html?requestedDomain=www.mathworks.com – Jorge 2017-10-12 12:13:25