次の方法で共有


Azure Kinect イメージ データを取得する

このページでは、Azure Kinect から画像を取得する方法について詳しく説明します。 この記事では、デバイスの色と深度の間で調整されたイメージをキャプチャしてアクセスする方法を示します。 イメージにアクセスするには、まずデバイスを開いて構成してから、イメージをキャプチャする必要があります。 イメージを構成してキャプチャする前に、デバイスを見つけて開く必要があります。

この記事の関数の使用方法を示す SDK ストリーミングの例 を参照することもできます。

次の関数が含まれています。

デバイスを構成して起動する

Kinect デバイスで使用できる 2 つのカメラは、複数のモード、解像度、出力形式をサポートしています。 完全な一覧については、Azure Kinect Development Kit ハードウェア仕様を参照してください。

ストリーミング構成は、k4a_device_configuration_t 構造体の値を使用して設定されます。

k4a_device_configuration_t config = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;
config.camera_fps = K4A_FRAMES_PER_SECOND_30;
config.color_format = K4A_IMAGE_FORMAT_COLOR_MJPG;
config.color_resolution = K4A_COLOR_RESOLUTION_2160P;
config.depth_mode = K4A_DEPTH_MODE_NFOV_UNBINNED;

if (K4A_RESULT_SUCCEEDED != k4a_device_start_cameras(device, &config))
{
    printf("Failed to start device\n");
    goto Exit;
}

カメラが起動すると、k4a_device_stop_cameras() が呼び出されるか、デバイスが閉じられるまで、データのキャプチャが続行されます。

安定化

マルチデバイス同期機能を使用してデバイスを起動する場合は、固定露出設定を使用することを強くお勧めします。 手動露出を設定すると、画像とフレームレートが安定する前に、デバイスから最大 8 個のキャプチャを取得できます。 自動露出では、画像とフレームレートが安定する前に最大 20 個のキャプチャを実行できます。

デバイスからキャプチャを取得する

画像は、関連付けられた方法でデバイスからキャプチャされます。 キャプチャされた各イメージには、深度イメージ、IR イメージ、カラー イメージ、または画像の組み合わせが含まれます。

既定では、API は、ストリーミング モードで要求されたすべてのイメージを受信した後にのみキャプチャを返します。 synchronized_images_onlyk4a_device_configuration_t パラメーターをクリアすることで、深度イメージまたはカラーイメージのみで部分的なキャプチャを返すように API を構成できます。

// Capture a depth frame
k4a_capture_t capture = NULL;
switch (k4a_device_get_capture(device, &capture, TIMEOUT_IN_MS))
{
case K4A_WAIT_RESULT_SUCCEEDED:
    break;
case K4A_WAIT_RESULT_TIMEOUT:
    printf("Timed out waiting for a capture\n");
    continue;
    break;
case K4A_WAIT_RESULT_FAILED:
    printf("Failed to read a capture\n");
    goto Exit;
}

API がキャプチャを正常に返したら、キャプチャ オブジェクトの使用が完了したら、k4a_capture_release() を呼び出す必要があります。

キャプチャからイメージを取得する

キャプチャしたイメージを取得するには、イメージの種類ごとに適切な関数を呼び出します。 つぎのいずれかです。

イメージの使用が完了したら、これらの関数によって返される k4a_image_release() ハンドルに対して k4a_image_t を呼び出す必要があります。

イメージ バッファーにアクセスする

k4a_image_t には、イメージのプロパティを取得するための多数のアクセサー関数があります。

イメージのメモリ バッファーにアクセスするには、k4a_image_get_bufferを使用します。

次の例では、キャプチャされた深度イメージにアクセスする方法を示します。 この同じ原則は、他のイメージの種類にも適用されます。 ただし、イメージの種類の変数は、IR や色などの正しいイメージの種類に置き換えてください。

// Access the depth16 image
k4a_image_t image = k4a_capture_get_depth_image(capture);
if (image != NULL)
{
    printf(" | Depth16 res:%4dx%4d stride:%5d\n",
            k4a_image_get_height_pixels(image),
            k4a_image_get_width_pixels(image),
            k4a_image_get_stride_bytes(image));

    // Release the image
    k4a_image_release(image);
}

// Release the capture
k4a_capture_release(capture);

次のステップ

これで、Azure Kinect デバイスを使用して、カメラの画像をキャプチャし、色と深度の間で調整する方法を確認しました。 次のことも可能です。

マイク にアクセスする