1

我是 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 数组将被初始化很多次,这是低效的,在示例代码中,这只会被初始化一次。

4

1 回答 1

1

一种解决方案是在初始化期间简单地获取一帧中的像素数并始终使用该值,因为记录的帧中的像素数不太可能发生变化。

例如,假设您有一个名为 OnNewDepthReplay 帧的方法,您将执行以下操作(未经测试,语法可能已关闭):

public void OnNewDepthReplayFrame(DepthReplayFrameEventArgs e) {
    if (depthPixels == null) {
        depthPixels = new new DepthImagePixel[eFramePixelDataLength];
    }
    // code that uses your depthPixels here
}

但是,使用 Kinect 1.5 和 1.6 SDK 附带的记录/回放功能实际上可能比使用 Kinect 工具箱更好。我曾经使用 Kinect Toolbox 进行录制/重放,但后来当 Kinect for Windows v 1.5 发布时,我自己转移到了 Kinect Studio。这是有关如何使用 Kinect Studio 的视频以及MSDN 上的指南

于 2013-02-19T07:20:26.897 回答