使用kinect获取鼠标点击的深度

时间:2014-12-03 15:37:16

标签: c# opencv kinect

我正在用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];

欢迎任何帮助!

1 个答案:

答案 0 :(得分:2)

我认为原因可能是您的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 - Getting and Displaying Depth Data in C#逐字逐句解除的。