我想同时或并行地从立体相机获取图像数据,保存在某个地方并在需要时读取数据。
目前我正在做
for i=1:100
start([vid1 vid2]);
imageData1=getdata(vid1,1);
imageData2=getdata(vid2,1);
%do several calculations%
....
end
在这个相机是连续工作的,而且速度很慢。如何让 2 个摄像头同时工作???
请帮忙..
PS:我也试过 parfor 但它没有帮助。
问候
无需并行计算工具箱!
以下解决方案通常可以解决像您这样的问题:
首先是视频,我只是使用一些向量作为“数据”并将它们保存到工作区,这将是您的两个视频文件:
% Creating of some "videos"
fakevideo1 = [1 ; 1 ; 1];
save('fakevideo1','fakevideo1');
fakevideo2 = [2 ; 2 ; 2];
save('fakevideo2','fakevideo2');
基本技巧是创建一个生成另一个 Matlab 实例的函数:
function [ ] = parallelinstance( fakevideo_number )
% create command
% -sd (set directory), pwd (current directory), -r (run function) ...
% finally "&" to indicate background computation
command = strcat('matlab -sd',{' '},pwd,{' '},'-r "processvideo(',num2str(fakevideo_number),')" -nodesktop -nosplash &');
% call command
system( command{1} );
end
最重要的是&
在终端命令的末尾使用!
在这个函数中,另一个函数被称为实际视频处理完成的地方:
function [] = processvideo( fakevideo_number )
% create file and variable name
filename = strcat('fakevideo',num2str(fakevideo_number),'.mat');
varname = strcat('fakevideo',num2str(fakevideo_number));
% load video to workspace or whatever
load(filename);
A = eval(varname);
% do what has to be done
results = A*2;
% save results to workspace, file, grandmothers mailbox, etc.
save([varname 'processed'],'results');
% just to show that both processes run parallel
pause(5)
exit
end
最后在主脚本中调用这两个进程:
% function call with number of video: parallelinstance(fakevideo_number)
parallelinstance(1);
parallelinstance(2);
我的代码是完全可执行的,所以随便玩一下。我尽量保持简单。毕竟,您会.mat
在工作区中找到两个包含已处理视频“数据”的文件。
请注意将字符串调整fakevideo
为所有视频文件的根目录。