我是 StackOverflow 和 Kinect SDK 的新手。我目前正在从事我最后一年的项目,该项目涉及来自 Kinect 的 Record/Replay Colour/Depth 和骨架数据。找到了一个启用此功能的Kinect 工具箱,我正在将该工具箱与 SDK 示例项目(颜色/深度/骨架基础 C# WPF)集成,以制作一个可以显示之前记录的 .replay 文件中的所有流的程序。
我现在遇到的问题是由于工具箱中的 KinectReplay 类和 SDK 中的 KinectSensor 类的差异。在 Depth Basics 示例代码中,为了显示流,WindowLoaded() 中的以下行为从 Kinect 检索的数据分配空间:
/
/ Allocate space to put the depth pixels we'll receive
this.depthPixels = new DepthImagePixel[this.sensor.DepthStream.FramePixelDataLength];
// Allocate space to put the color pixels we'll create
this.colorPixels = new byte[this.sensor.DepthStream.FramePixelDataLength * sizeof(int)];
// This is the bitmap we'll display on-screen
this.colorBitmap = new WriteableBitmap(this.sensor.DepthStream.FrameWidth, this.sensor.DepthStream.FrameHeight, 96.0, 96.0, PixelFormats.Bgr32, null);
//The code below came from "Skeleton basics C# WPF", which I need to find the correspondence of "CoordinateMapper" in KinectReplay Class
// We are not using depth directly, but we do want the points in our 640x480 output resolution.
DepthImagePoint depthPoint = this.sensor.CoordinateMapper.MapSkeletonPointToDepthPoint(skelpoint, DepthImageFormat.Resolution640x480Fps30);
在原始示例代码中,上述对象大小的参数是从 KinectSensor 对象中检索的,我需要做类似的事情,但从 KinectReplay 对象中获取数据,例如,我如何获得“<code>this.来自 KinectReplay 对象的 sensor.DepthStream.FramePixelDataLength” 为“<code>this.replay = new KinectReplay(recordStream);” ?
我能想到的唯一解决方案是调用“<code>this.depthPixels = new DepthImagePixel[e.FramePixelDataLength]; ” 在replay_DepthImageFrameReady(object sender, ReplayDepthImageFrameReadyEventArgs e)
每次从 KinectReplay 接收到深度图像帧时调用其中。因此,一个 DepthImagePixel 数组将被初始化很多次,这是低效的,在示例代码中,这只会被初始化一次。