实时视频采集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
这是一个简单的循环缓冲区。
此代码通过 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
这是一个简单的循环缓冲区。