实时视频采集MATLAB存储最后一帧信息

Storing information of last frames in real time video acquisition MATLAB

此代码通过 Matlab 中的网络摄像头实时处理视频。对于每一帧,我执行一些操作,最终结果是 'degrees'.

我需要存储最后 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

完全没有问题,使用 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

这是一个简单的循环缓冲区。