0

私はkinectプログラミングの初心者です。kinectとopencvを使用してボールの追跡に取り組んでいます。kinectが深度データを提供し、以下のコードを使用していることは誰もが知っています。

DepthImagePoint righthandDepthPoint = 
    sensor.CoordinateMapper.MapSkeletonPointToDepthPoint
    (
        me.Joints[JointType.HandRight].Position, 
        DepthImageFormat.Resolution640x480Fps30
    );

double rightdepthmeters = (righthandDepthPoint.Depth);

これを使用して、ジョイントタイプを指定する関数を使用して、右手の深さを取得できMapSkeletonPointToDepthPoint()ます。

画像でどこを指定することで他のオブジェクトの深さを取得することは可能ですか?与えられた座標..その座標でオブジェクトの深さを取得したいですか?

4

1 に答える 1

0

Kinect SDKからの深度データのプルは、 DepthImagePixel構造から抽出できます。

以下のサンプルコードは、全体をループしてDepthImageFrame各ピクセルを調べます。見たい特定の座標がある場合は、forループを削除して、xyを特定の値に設定します。

// global variables

private const DepthImageFormat DepthFormat = DepthImageFormat.Resolution320x240Fps30;
private const ColorImageFormat ColorFormat = ColorImageFormat.RgbResolution640x480Fps30;

private DepthImagePixel[] depthPixels;

// defined in an initialization function

this.depthWidth = this.sensor.DepthStream.FrameWidth;
this.depthHeight = this.sensor.DepthStream.FrameHeight;

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

private void SensorAllFramesReady(object sender, AllFramesReadyEventArgs e)
{
    if (null == this.sensor)
        return;

    bool depthReceived = false;

    using (DepthImageFrame depthFrame = e.OpenDepthImageFrame())
    {
        if (null != depthFrame)
        {
            // Copy the pixel data from the image to a temporary array
            depthFrame.CopyDepthImagePixelDataTo(this.depthPixels);

            depthReceived = true;
        }
    }

    if (true == depthReceived)
    {
        // loop over each row and column of the depth
        for (int y = 0; y < this.depthHeight; ++y)
        {
            for (int x = 0; x < this.depthWidth; ++x)
            {
                // calculate index into depth array
                int depthIndex = x + (y * this.depthWidth);

                // extract the given index
                DepthImagePixel depthPixel = this.depthPixels[depthIndex];

                Debug.WriteLine("Depth at [" + x + ", " + y + "] is: " + depthPixel.Depth);
            }
        }
    }
}
于 2013-02-25T16:39:01.787 に答える