1

我想同时或并行地从立体相机获取图像数据,保存在某个地方并在需要时读取数据。

目前我正在做

for i=1:100
start([vid1 vid2]);
imageData1=getdata(vid1,1);
imageData2=getdata(vid2,1);

%do several calculations%
....
end

在这个相机是连续工作的,而且速度很慢。如何让 2 个摄像头同时工作???

请帮忙..

PS:我也试过 parfor 但它没有帮助。

问候

4

1 回答 1

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为所有视频文件的根目录。

于 2013-10-02T17:22:29.680 回答