我正在学习Kinect,我遇到了问题。我想写一个文本文件骨架关节的坐标,但我不知道该怎么做。有人能帮助我吗?
答案 0 :(得分:2)
如果您使用的是SDK:
using System.IO;
StreamWriter writer = new StreamWriter(@path);
int frames = 0;
...
void AllFramesReady(object sender, AllFramesReadyEventArgs e)
{
frames++;
using (SkeletonFrame sFrame = e.OpenSkeletonFrameData())
{
if (sFrame == null)
return;
skeletonFrame.CopySkeletonDataTo(skeletons);
Skeleton skeleton = (from s in skeletons
where s.TrackingState == SkeletonTrackingState.Tracked
select s);
if (skeleton == null)
return;
if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
{
writer.Write("{0} {1}@", frames, timestamp);//I dont know how you want to do this
foreach (Joint joint in skeleton.Joints)
{
writer.Write(joint.Position.X + "," + joint.Position.Y + "," joint.Position.Z + ",");
}
writer.Write(Environment.NewLine);
}
}
}
这将获取检测到的骨架的关节,并将它们写入文件而不指定其相对关节,但它是关节类型的默认顺序。请注意,这是与kinect传感器的距离。
答案 1 :(得分:1)
谢谢你,但这行中有一个'骷髅问题: 骨架骨架=(从骨架中的s,其中s.TrackingState == SkeletonTrackingState.Tracked select s);
System.IO.FileStream fs = new System.IO.FileStream(@" F:\ Kinect Install \ SkeletonBasics-WPF \ Coordinates.txt",FileMode.Append,FileAccess.Write,FileShare.None ); int frame = 0; Skeleton [] skeletons = new Skeleton [0];
public void AllFramesReady(object sender, AllFramesReadyEventArgs e)
{
StreamWriter sw = new StreamWriter(fs);
frame++;
using (SkeletonFrame sFrame = e.OpenSkeletonFrame())
{
if (sFrame == null) return;
sFrame.CopySkeletonDataTo(skeletons);
Skeleton skeleton = (from s in skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s);
if (skeleton == null)
return;
if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
{
foreach (Joint joint in skeleton.Joints)
{
sw.WriteLine(joint.Position.X + "," + joint.Position.Y + "," + joint.Position.Z + ",");
}
//writer.Write(Environment.NewLine);
sw.Flush();
sw.Close();
}
}
}