当前位置: 首页 > 编程语言 > C#

Kinect:我如何识别第一个被跟踪的骨架并在之后用它做任务分享

时间:2023-04-11 02:24:49 C#

C#学习教程:Kinect:如何识别第一个被跟踪的骨骼并用它来做后面的任务骨骼,然后将其用于任务。我只对第一个骨架感兴趣,之后的任何骨架我都不需要。优选地,根本不跟踪下一个进入的骨架。有人可以帮我解决这个问题谢谢。我目前使用的代码不起作用。我试过一些快速的linq查询,但我不太确定如何使用它。总是有错误。有人可以给我一些例子,我可以提前表示感谢!!privatevoidSensorSkeletonFrameReady(objectsender,SkeletonFrameReadyEventArgse){Skeleton[]skeletons=newSkeleton[0];使用(SkeletonFrameskeletonFrame=e.OpenSkeletonFrame()){if(skeletonFrame!=null){skeletons=newSkeleton[skeletonFrame.SkeletonArrayLength];skeletonFrame.CopySkeletonDataTo(骨架);}}using(DrawingContextdc=this.drawingGroup.Open()){//绘制透明背景设置渲染尺寸dc.DrawRectangle(Brushes.Black,null,newRect(160,0.0,RenderWidth,RenderHeight));if(skeletons.Length!=0){foreach(Skeletonskelinskeletons){RenderClippedEdges(skel,dc);如果(skel.TrackingState==SkeletonTrackingState.Tracked){this.TrackingId=Skel;传感器.SkeletonStream.AppChoosesSkeletons=true;传感器.SkeletonStream.ChooseSkeletons(skel.TrackingId);this.DrawBonesAndJoints(skel,dc);如果(skel==null){Process.Start("wmplayer.exe","C:\Users\User\Downloads\Test.wma");}}elseif(skel.TrackingState==SkeletonTrackingState.NotTracked){sensor.SkeletonStream.AppChoosesSkeletons=false;}}}//防止在渲染区域外绘制this.drawingGroup.ClipGeometry=newRectangleGeometry(newRect(160,0.0,RenderWidth,RenderHeight));您只能使用以下代码跟踪一个骨架:inttrackingID;skeletonTracked=newSkeleton();布尔首先=真;骷髅骨架;骨架[]骨架=新骨架[6];...publicvoidAllFramesReady(objectsender,AllFramesReadyEventArgse){使用(SkeletonFramesFrame=e.OpenSkeletonFrame()){sFrame.CopySkeletonDataTo(skeletons);skeleton=(fromsinskeletonswheres.TrackingState==SkeletonTrackingState.Trackedselects).FirstOrDefault();如果(骨架==null)返回;}using(DrawingContextdc=this.drawingGroup.Open()){//绘制透明背景设置渲染尺寸dc.DrawRectangle(Brushes.Black,null,newRect(160,0.0,RenderWidth,RenderHeight));渲染剪边(斯凯尔,直流);if(skeleton.TrackingState==SkeletonTrackingState.Tracked){if(first){skeletonTracked=skeleton;trackingId=skeleton.TrackingID;...首先=假;}if(skeleton.TrackingID==trackingId){...}}...}}此代码查找检测到的第一个骨架,如果它的跟踪ID等于检测到的第一个骨架,它会对其执行操作,否则你以后没有检测到任何对象但是,我会看看Kinect用户检测,因为它有其他方法来检测具有单独的ids/索引的骨架。ID的方法非常适合区分多个玩家,但它们对于每根骨骼的差异很大。索引会保存很短的时间,因此您可以使用一些代码来检测骨架何时离开框架。每当检测到新玩家时,Kinect都会跟踪玩家并将ID设置在骨架数组的不同索引(长度==6)中。这就是为什么当跟踪ID为零且索引号为5时,您需要保存播放器ID。以上就是C#学习教程:Kinect:HowdoIidentifythefirsttrackedskeletonanduseditasatasktosharelater,如果对大家有用需要进一步了解C#学习教程,希望大家多多付出注意——intskeletonId=0;inttrackId=0;voidmyKinect_SkeletonFrameReady(objectsender,SkeletonFrameReadyEventArgse){Skeleton[]skeletons=null;使用(SkeletonFrameframe=e.OpenSkeletonFrame()){if(frame!=nulltons){skeletonFramenewSkeleton[frame.SkeletonArrayLength];frame.CopySkeletonDataTo(骨架);}}if(skeletons==null)返回;//空ID计数的变量intskeletonsNull=0;//计数...foreach(骨架中的骨架骨架文本){if(skeletonText.TrackingId==0){skeletonNull++;}else{skeletonId=skeletonText.TrackingId;}}if(skeletonsNull==5){trackId=skeletonId;}foreach(Skeletonskeletoninskeletons){if(skeleton.TrackingId==trackId){//dosomething}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: