我想要在kinect中获得关节的坐标,我正在使用这个代码,但它在这行Skeleton skeleton = (from s in skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s)上给出了错误;
public void AllFramesReady(object sender, AllFramesReadyEventArgs e)
{
System.IO.FileStream fs = new System.IO.FileStream(@"C:\Users\MUDASSIR AHMED\Downloads\kinect samples\SkeletonBasics-WPF\Coordinates.csv", FileMode.Append, FileAccess.Write, FileShare.None);
int frame = 0;
Skeleton[] skeletons = new Skeleton[0];
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();
}
}
}它显示此错误:错误1无法将类型'System.Collections.Generic.IEnumerable‘隐式转换为'Microsoft.Kinect.Skeleton’。存在显式转换(是否缺少强制转换?)c:\users\mudassir ahmed\documents\visual studio 2010\Projects\3dcoordinateskinect\3dcoordinateskinect\MainWindow.xaml.cs 42
发布于 2019-03-21 18:34:31
问题就在下面这一行:
Skeleton skeleton = (from s in skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s);这个查询的右边部分返回一个列表(IEnumerable),而您期望的是一个对象(Skeleton)。也许您想要匹配查询的第一个元素?
(from s in skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s).FirstOrDefault();发布于 2019-06-28 20:53:52
或者,您可以使用'foreach‘函数逐个获取骨骼,就像处理关节一样
if (skeletonFrame != null)
{
skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
skeletonFrame.CopySkeletonDataTo(skeletons);
foreach (Skeleton skele in skeletons)
{
// skip the skeleton if it is not being tracked
if (skele.TrackingState != SkeletonTrackingState.Tracked)
continue;
ExportCSVFile(skele, skeletonFrame);
}
}https://stackoverflow.com/questions/54161633
复制相似问题