首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于kinect的人体活动识别

基于kinect的人体活动识别
EN

Stack Overflow用户
提问于 2019-01-13 00:35:49
回答 2查看 99关注 0票数 1

我想要在kinect中获得关节的坐标,我正在使用这个代码,但它在这行Skeleton skeleton = (from s in skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s)上给出了错误;

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2019-03-21 18:34:31

问题就在下面这一行:

代码语言:javascript
复制
  Skeleton skeleton = (from s in skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s);

这个查询的右边部分返回一个列表(IEnumerable),而您期望的是一个对象(Skeleton)。也许您想要匹配查询的第一个元素?

代码语言:javascript
复制
(from s in skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s).FirstOrDefault();
票数 4
EN

Stack Overflow用户

发布于 2019-06-28 20:53:52

或者,您可以使用'foreach‘函数逐个获取骨骼,就像处理关节一样

代码语言:javascript
复制
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);

    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54161633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档