2015-02-09 51 views
0

該代碼通過Matlab中的網絡攝像頭實時處理視頻。對於每一幀,我執行一些操作,最終結果是'度'。在實時視頻採集中存儲最後幀的信息MATLAB

我需要存儲度數的結果,比方說最後15幀,並檢查它們是否都在相同的範圍內(例如50到80度之間),所有這些在視頻仍在運行時。但我想刪除以前的那些爲了節省內存(因爲它是視頻採集它可以永遠運行),或者如果不可能,我怎麼能總是比較過去的15幀?

function DetectTarget2() 
    clc;imaqreset;close all; 

    try 
     % For linux 
     Vid = videoinput('linuxvideo', 1); 
    catch 
     try 
      % For mac 
      Vid = videoinput('macvideo', 1); 
     catch 
      errordlg('No webcam available'); 
     end 
    end 

    set(Vid,'FramesPerTrigger',1); %capture 1 frame every time Vid is triggered 
    set(Vid,'TriggerRepeat',Inf); %infinite amount of triggers 
    set(Vid,'ReturnedColorSpace','RGB'); 
    triggerconfig(Vid, 'Manual'); %trigger Vid manually within program 

    t = timer('TimerFcn',@dispim, 'Period', 0.04,... 
     'executionMode','fixedRate'); 

    function dispim(~,~) 
      trigger(Vid)%trigger Vid to capture image 
      im=getdata(Vid,1); 
      detector = vision.CascadeObjectDetector('Cascade1Matlab.xml'); 
      bbox = step(detector, im); 

    % CALCULATIONS 

    degrees=result; 
    end 
    end 
+0

你解決了你的問題嗎?如果我的答案解決了您的問題,我會很高興,如果它可以被標記爲解決方案,並可能收到upvote。如果沒有,我會有興趣聽到你的問題的一些額外的解釋或爲什麼我的答案不能解決你的問題。 – Trilarion 2015-02-12 13:08:08

+0

噢,是的,我非常抱歉,前幾天當我遇到互聯網連接問題時我正在做這件事,之後我完全忘記了。非常感謝! – Zynk 2015-02-12 17:01:15

回答

1

完全沒問題,使用modulo函數來訪問單元陣列中的單元。

在有些僞代碼:

result_buffer = cell(1, 15); 
index = 1; 
while ~finished 
    ... % some calculation 
    result_buffer{mod(index, 15) + 1} = result; 
    % access some previous result 
    result_buffer{mod(index - 5, 15) + 1}; % the image of 5 iterations before 
    index = index + 1; 
end 

這是一個簡單循環緩衝器。

+0

問題和解決方案完全獨立於圖像處理上下文。 – Trilarion 2015-02-09 13:50:56

+0

好的,我是圖像處理新手,所以我不知道是否有特殊情況。 這工作正常,所以謝謝你! – Zynk 2015-02-12 17:01:47