【发布时间】:2016-03-11 19:59:22
【问题描述】:
我目前正在开展一个项目,该项目结合了 VICON 动作捕捉系统来分析受试者的步长。该系统使用带有标记的红外摄像机来创建 3D 模型。 VICON 系统目前设置为使用 DataStreamSDK 以允许在 MATLAB 中进行实时数据记录。我的最终目标是从一个特定的标记(XYZ 坐标)中提取数据并将该数据导出到一个 txt 文件,以便我以后可以编辑它)。我已经集成了预先存在的代码以及我的一些原始代码,以允许我提取特定标记的坐标并尝试将这些坐标放入一个 CSV 文件中,该文件为每一帧添加一个新坐标。然而,当我运行代码时,在我告诉数据停止流式传输之后,CSV 文件似乎只包含来自其最近帧的坐标的重复。相反,我希望将每个帧的坐标输入到 CSV 文件的新行中。我在下面提供了一段代码。如果需要,我可以提供整个代码,但其中大部分处理启用来自 VICON Nexus 程序的数据流。写入 CSV 文件的部分位于底部。
我应该如何编辑代码,以便在提取新数据时不断更新 CSV 文件,而不是简单地将最近提取的坐标点 1:n 重复?提前谢谢你。
for MarkerIndex = 9:9
% Get the marker name
MarkerName = MyClient.GetMarkerName( SubjectName, MarkerIndex ).MarkerName;
% Get the marker parent
MarkerParentName = MyClient.GetMarkerParentName( SubjectName, MarkerName ).SegmentName;
% Get the global marker translation
Output_GetMarkerGlobalTranslation = MyClient.GetMarkerGlobalTranslation( SubjectName, MarkerName );
fprintf( ' Marker #%d: %s (%g, %g, %g) %s\n', ...
MarkerIndex - 1, ...
MarkerName, ...
Output_GetMarkerGlobalTranslation.Translation( 1 ), ...
Output_GetMarkerGlobalTranslation.Translation( 2 ), ...
Output_GetMarkerGlobalTranslation.Translation( 3 ), ...
AdaptBool( Output_GetMarkerGlobalTranslation.Occluded ) );
ftemp = fopen('TestData.txt','w' );
for Output_GetFrameNumber = 1:n
fprintf(ftemp, '%f,%f,%f\n',Output_GetMarkerGlobalTranslation.Translation( 1 ),Output_GetMarkerGlobalTranslation.Translation( 2 ),Output_GetMarkerGlobalTranslation.Translation( 3 ));
end
fclose(ftemp);
end
【问题讨论】:
-
你不需要在循环内获取一个新的
Output_GetMarkerGlobalTranslation吗?否则我不确定你的信息随着时间的推移存储在哪里,因为你只能访问Translation字段的 3 个元素。 -
否则,请向我们提供有关
Output_GetMarkerGlobalTranslation外观的更多信息 -
不用说“提前谢谢”,你可以接受最佳答案后说谢谢:)
-
为什么在每次循环迭代期间都写入文件?为什么不直接在矩阵中收集数据并在最后将其写入文件?打开、写入和关闭都很慢,只需要执行一次。
标签: matlab csv real-time motion-detection