Camera 如何在Matlab中并行处理视频采集等各种任务?

Camera 如何在Matlab中并行处理视频采集等各种任务?,camera,matlab,Camera,Matlab,我想同时从立体相机获取图像数据,或者并行地保存在某个地方,并在需要时读取数据 目前我正在做 for i=1:100 start([vid1 vid2]); imageData1=getdata(vid1,1); imageData2=getdata(vid2,1); %do several calculations% .... end 在这种情况下,摄像机连续工作,速度非常慢。如何使两台摄像机同时工作 请帮忙 我也试过parfor,但没用 关于不需要并行计算工具箱 以下解决方案通常可以解决像

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

目前我正在做

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

%do several calculations%
....
end
在这种情况下,摄像机连续工作,速度非常慢。如何使两台摄像机同时工作

请帮忙

我也试过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
文件,其中包含已处理的视频“数据”


请注意将字符串调整为所有视频文件的根目录名。

不需要并行计算工具箱

以下解决方案通常可以解决像您这样的问题:

首先是视频,我只是使用一些矢量作为“数据”,并将它们保存到工作区,这将是您的两个视频文件:

% 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
以命名所有视频文件的根。

您是否尝试过
parfor
?否…您能解释一下…这是什么吗???它与
for
相同,并且使用相同的方式,只是它可以在一个循环内使用并行计算进行独立计算。可能它现在在你的特定情况下有效,但值得一试。(它需要并行计算工具箱)我不确定如何使用parfor并行获取图像数据。首先在matlab提示符中键入
ver
,检查您是否拥有
并行计算工具箱。如果是这样,用
parfor
替换
for
,看看你是否能加速。否则我的评论对你没有帮助。你试过
parfor
吗?没有…你能解释一下…那是什么吗???它和
for
是一样的,并且使用同样的方法,只是它可以在一个循环中使用并行计算进行独立计算。可能它现在在你的特定情况下有效,但值得一试。(它需要并行计算工具箱)我不确定如何使用parfor并行获取图像数据。首先在matlab提示符中键入
ver
,检查您是否拥有
并行计算工具箱。如果是这样,用
parfor
替换
for
,看看你是否能加速。否则我的评论对你没有帮助。谢谢你的回答。我不知道如何使用你的答案。我不能直接运行它,它已经有一些错误。你能给我一些这样的例子的链接吗。什么错误?使用相应的代码创建两个函数文件
parallelinstance
processvideo
,并创建一个脚本文件,其中包含答案的第一部分和最后一部分。运行主脚本,是否仍会出现错误?哪一个?嗨,没有错误,但是我怎么得到图像帧呢?我应该在哪里指定摄像机的视频格式?我应该在假视频部分指定吗?我有点困惑,答案对我来说不是很清楚。谢谢,我假设你知道如何处理你的视频,这似乎不是问题,因为我认为你已经做过一次了,但速度太慢了。在那件事上我帮不了你。只需在
processvideo
功能中放入您对单个视频所做的一切。剩下的只是组织多个实例。谢谢你的回答。我不知道如何使用你的答案。我不能直接运行它,它已经有一些错误。你能给我一些这样的例子的链接吗。什么错误?使用相应的代码创建两个函数文件
parallelinstance
processvideo
,并创建一个脚本文件,其中包含答案的第一部分和最后一部分。运行主脚本,是否仍会出现错误?哪一个?嗨,没有错误,但是我怎么得到图像帧呢?我应该在哪里指定摄像机的视频格式?我应该在假视频部分指定吗?我有点困惑,答案对我来说不是很清楚。谢谢,我假设你知道如何处理你的视频,这似乎不是问题,因为我认为你已经做过一次了,但速度太慢了。在那件事上我帮不了你。只需在
processvideo
功能中放入您对单个视频所做的一切。剩下的就是组织多个实例。