我想同时或并行地从立体相机获取图像数据,保存在某处并在需要时读取数据。
目前我在做
for i=1:100
start([vid1 vid2]);
imageData1=getdata(vid1,1);
imageData2=getdata(vid2,1);
%do several calculations%
....
end
在这款相机中连续工作且速度非常慢。如何一次制作2台摄像机?
请帮助..
P.S:我也试过parfor,但没有帮助。此致
答案 0 :(得分:1)
无需并行计算工具箱!
以下解决方案通常可以解决像您这样的问题:
首先是视频,我只是使用一些向量作为“数据”并将它们保存到工作区,这些将是您的两个视频文件:
% 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
以命名所有视频文件的根目录。