2015-02-09 31 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