【问题标题】:Convert Kinect Beta code to version 1.5将 Kinect Beta 代码转换为 1.5 版
【发布时间】:2013-03-30 05:40:22
【问题描述】:

您好,我在使用 Kinect 进行的项目中使用了这种方法。不幸的是,代码是 beta 版本,我需要将它更新到 1.5 sdk 版本。我尝试了一些东西,但它们不起作用。到目前为止,这是我必须要做的。该方法称为 nui_DepthFrameReady。

 void nui_DepthFrameReady(object sender, ImageFrameReadyEventArgs e)
    {
        if (!savedDepth)
        {
            PlanarImage Image = e.ImageFrame.Image;
            byte[] convertedDepthFrame = convertDepthFrame(Image.Bits);

            depth.Source = BitmapSource.Create(
                Image.Width, Image.Height, 96, 96, PixelFormats.Bgr32, null, convertedDepthFrame, Image.Width * 4);

            ++totalFrames;

            DateTime cur = DateTime.Now;
            if (cur.Subtract(lastTime) > TimeSpan.FromSeconds(1))
            {
                int frameDiff = totalFrames - lastFrames;
                lastFrames = totalFrames;
                lastTime = cur;
                frameRate.Text = frameDiff.ToString() + " fps";
            }

            if (subscribed)
            {
                //byte[] ColoredBytes = GenerateColoredBytes(e.ImageFrame);
                //create an image based on the colored bytes
                BitmapSource myBitmapDepth = BitmapSource.Create(Image.Width, Image.Height, 96, 96, PixelFormats.Bgr32, null, convertedDepthFrame, Image.Width * PixelFormats.Bgr32.BitsPerPixel / 8);
                string imageFilePath = @"C:\Temp\kinect\depth\bmpDepthFrame_" + cur.TimeOfDay.ToString().Replace(':', '.') + ".png";
                string dataFilePath = @"C:\Temp\kinect\depth\depthFrame_" + cur.TimeOfDay.ToString().Replace(':', '.') + ".dat";
                //savePngFrame(myBitmapDepth, imageFilePath);

                //Crop frame to size 180x240
                byte[] croppedDepthFrame = new byte[180 * 240 * 2];

                for (int i = 0; i < 240; i++)
                {
                    for (int j = 0; j < 180 * 2; j += 2)
                    {
                        croppedDepthFrame[i * 180 * 2 + j] = Image.Bits[i * 320 * 2 + j + 69 * 2];
                        croppedDepthFrame[i * 180 * 2 + j + 1] = Image.Bits[i * 320 * 2 + j + 1 + 69 * 2];
                        //Console.Write((i * 180 * 2 + j) + "-" + (i * 180 * 2 + j + 69*2) +", ");
                    }
                    //Console.WriteLine();
                }
                FileStream fs = new FileStream(dataFilePath, FileMode.Create);
                fs.Write(croppedDepthFrame, 0, croppedDepthFrame.Length);
                fs.Close();
            }

            savedDepth = true;
        }
    }

感谢您的帮助。 这就是我目前所拥有的

void nui_DepthImageReady(object sender, DepthImageFrameReadyEventArgs e)
    {
        if (!savedDepth)
        {
            short[] pixelData;
            bool receivedData = false;
            using (DepthImageFrame depthImageFrame = e.OpenDepthImageFrame())
            {
                if (depthImageFrame != null)
                {
                    if (pixelData == null) //allocate the first time
                    {
                        pixelData = new short[depthImageFrame.PixelDataLength];
                    }
                    depthImageFrame.CopyPixelDataTo(pixelData);
                    receivedData = true;
                }
                else
                {
                    // apps processing of image data took too long; it got more than 2 frames behind.
                    // the data is no longer avabilable.
                }
            }
            if (receivedData)
            {
                byte[] convertedDepthFrame = convertDepthFrame(Image.bits);

                depth.Source = BitmapSource.Create(Image.Width, Image.Height, 96, 96, PixelFormats.Bgr32, null, convertedDepthFrame, Image.Width * 4);

                ++totalFrames;

                DateTime cur = DateTime.Now;
                if (cur.Subtract(lastTime) > TimeSpan.FromSeconds(1))
                {
                    int frameDiff = totalFrames - lastFrames;
                    lastFrames = totalFrames;
                    lastTime = cur;
                    frameRate.Text = frameDiff.ToString() + " fps";
                }

                if (subscribed)
                {
                    //byte[] ColoredBytes = GenerateColoredBytes(e.ImageFrame);
                    //create an image based on the colored bytes
                    BitmapSource myBitmapDepth = BitmapSource.Create(Image.Width, Image.Height, 96, 96, PixelFormats.Bgr32, null, convertedDepthFrame, Image.Width * PixelFormats.Bgr32.BitsPerPixel / 8);
                    string imageFilePath = @"C:\Temp\kinect\depth\bmpDepthFrame_" + cur.TimeOfDay.ToString().Replace(':', '.') + ".png";
                    string dataFilePath = @"C:\Temp\kinect\depth\depthFrame_" + cur.TimeOfDay.ToString().Replace(':', '.') + ".dat";
                    //savePngFrame(myBitmapDepth, imageFilePath);

                    //Crop frame to size 180x240
                    byte[] croppedDepthFrame = new byte[180 * 240 * 2];

                    for (int i = 0; i < 240; i++)
                    {
                        for (int j = 0; j < 180 * 2; j += 2)
                        {
                            croppedDepthFrame[i * 180 * 2 + j] = Image.Bits[i * 320 * 2 + j + 69 * 2];
                            croppedDepthFrame[i * 180 * 2 + j + 1] = Image.Bits[i * 320 * 2 + j + 1 + 69 * 2];
                            //Console.Write((i * 180 * 2 + j) + "-" + (i * 180 * 2 + j + 69*2) +", ");
                        }
                        //Console.WriteLine();
                    }
                    FileStream fs = new FileStream(dataFilePath, FileMode.Create);
                    fs.Write(croppedDepthFrame, 0, croppedDepthFrame.Length);
                    fs.Close();
                }
            }
            savedDepth = true;
        }
    }

Image.Bits 在 kinect 或 Image.Width、Image.Height 的新 SDK 中没有定义 这些是正在发生的错误,所以我不知道如何转换代码以获得相同的信息。

【问题讨论】:

  • 您看到了什么错误?你试过什么没用?哪些台词让你感到悲伤?
  • 对不起,我应该更深入。 PlanarImage 不在 Kinect 的新 SDK 中。所以任何带有图像的东西都不起作用。 Fpr 示例 byte[] convertDepthFrame = convertDepthFrame(Image.Bits);位不被识别。
  • 你的最终目标是什么?您看过不同的 1.5 示例吗? kinectforwindows.codeplex.com
  • 我的最终目标是从发生的运动中收集数据。意思是当一个人移动时。我想要运动发生的时间、深度图像的哪个身体部位以及移动了多少。

标签: c# vb.net sdk kinect


【解决方案1】:

我将您的示例与 Kinect 1.5 SDK 示例中的示例进行比较,您所称的 Image 可能与 pixelData 相同。我看不出Image 是在哪里定义的,所以我猜。这有帮助吗?

【讨论】:

  • 我认为问题在于比较两者时我无法得到相同的信息,或者我不知道如何从 'pixelData' 的 'Image' 中获取相同的信息。 'Image' 被定义为'PlanarImage' 我没有在第二个代码中转换它
  • 我看到顶部的定义。感谢您指出。你想从Image 中的数据计算什么?您的应用的最终目标是什么?
猜你喜欢
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 2012-06-16
  • 1970-01-01
  • 2011-08-18
  • 2013-07-30
  • 1970-01-01
相关资源
最近更新 更多