使用 kinect 单击鼠标获得深度

本文关键字:深度 鼠标 kinect 单击 使用 | 更新日期: 2023-09-27 18:33:08

我正在用 Kinect 开始一个项目。

我想做的第一件事是让用户单击一个对象,程序返回该对象与 kinect 的距离。

我的代码:

private void colorImg_MouseDown(object sender, MouseButtonEventArgs e)
{
    double distance;
    System.Windows.Point position = Mouse.GetPosition(colorImg);
    distance = position.X + (position.Y * 640);
    int af = (int)distance;
    int depth = depthPixels[af].Depth;
    System.Windows.Forms.MessageBox.Show("" + depth);
}

但这总是返回0,问题是deptPixels的深度属性从一开始就总是0的。我用断点检查了这一行,对于每个像素,深度都是0 .但是为什么?

this.depthPixels = new DepthImagePixel[this.sensor.DepthStream.FramePixelDataLength];

欢迎任何帮助!

使用 kinect 单击鼠标获得深度

我认为

原因可能是您的DepthImagePixel[]没有被填充。

您显示的代码行

this.depthPixels = new DepthImagePixel[this.sensor.DepthStream.FramePixelDataLength];

初始化数组但不向其添加任何数据,因此我希望其中的所有值均为零。

初始化类时,应添加一个更新此内容的事件:

this.sensor.DepthFrameReady += this.SensorDepthFrameReady;

并将其添加到类中:

private void SensorDepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
{
    using (DepthImageFrame depthFrame = e.OpenDepthImageFrame())
    {
        if (depthFrame != null)
        {
            depthFrame.CopyDepthImagePixelDataTo(this.depthPixels);
        }
        else
        {
            // depthFrame is null because the request did not arrive in time
        }
    }
}

这是从 MSDN - 在 C# 中获取和显示深度数据中逐字解除的(大致)解除的。