Abrufen von Bilddaten für Azure Kinect

Diese Seite enthält Informationen zum Abrufen von Bildern vom Azure Kinect-Gerät. In diesem Artikel wird beschrieben, wie Sie die zwischen der Farbe und der Tiefe des Geräts koordinierten Bilder aufnehmen und darauf zugreifen. Für den Zugriff auf Bilder müssen Sie zunächst das Gerät öffnen und konfigurieren. Dann können Sie Bilder aufnehmen. Vor dem Konfigurieren und Aufnehmen eines Bilds müssen Sie das Gerät suchen und öffnen.

Informationen finden Sie auch auf GitHub im Streamingbeispiel für das SDK, das die Verwendung der in diesem Artikel beschriebenen Funktionen veranschaulicht.

Die folgenden Funktionen werden behandelt:

Konfigurieren und Starten des Geräts

Die beiden Kameras im Kinect-Gerät unterstützen mehrere Modi, Auflösungen und Ausgabeformate. Eine vollständige Liste finden Sie in den Hardwarespezifikationen des Azure Kinect Development Kits.

Die Streamingkonfiguration wird mithilfe der Werte in der Struktur k4a_device_configuration_t festgelegt.

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;
}

Nachdem die Kameras gestartet wurden, nehmen sie Daten auf, bis k4a_device_stop_cameras() aufgerufen oder das Gerät beendet wird.

Stabilisierung

Wenn Sie Geräte mithilfe der Funktion zur Synchronisierung mehrerer Geräte starten, wird dringend empfohlen, dabei eine feste Belichtungseinstellung zu verwenden. Mit einer manuellen Belichtungseinstellung müssen mit dem Gerät bis zu acht Aufnahmen gemacht werden, bis Bilder und Bildsequenz stabilisiert werden. Mit der automatischen Belichtung müssen bis zu 20 Aufnahmen gemacht werden, bis Bilder und Bildsequenz stabilisiert werden.

Abrufen einer Aufnahme vom Gerät

Bilder werden mit dem Gerät in korrelierter Weise aufgenommen. Jedes aufgenommene Bild enthält ein Tiefenbild, ein IR-Bild, ein Farbbild oder eine Kombination aus Bildern.

Standardmäßig gibt die API eine Aufnahme nur zurück, wenn alle angeforderten Bilder für den Streamingmodus empfangen wurden. Sie können die API so konfigurieren, dass partielle Aufnahmen nur mit Tiefen- oder Farbbildern zurückgegeben werden, sobald diese verfügbar sind. Dazu müssen Sie den Parameter synchronized_images_only von k4a_device_configuration_t löschen.

// 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;
}

Nachdem die API eine Aufnahme erfolgreich zurückgegeben hat, müssen Sie k4a_capture_release() aufrufen, wenn Sie das Aufnahmeobjekt nicht mehr verwenden.

Abrufen eines Bilds aus der Aufnahme

Zum Abrufen eines aufgenommenen Bilds rufen Sie die entsprechende Funktion für jeden Bildtyp auf. Enthält einen der folgenden Werte:

Sie müssen k4a_image_release() in jedem k4a_image_t-Handle aufrufen, das von diesen Funktionen zurückgegeben wird, wenn Sie das Bild nicht mehr verwenden.

Zugreifen auf Bildpuffer

k4a_image_t enthält viele Accessorfunktionen zum Abrufen von Eigenschaften des Bilds.

Verwenden Sie kk4a_image_get_buffer, um auf den Speicherpuffer des Bilds zuzugreifen.

Im folgenden Beispiel wird der Zugriff auf ein aufgenommenes Tiefenbild veranschaulicht. Das gleiche Prinzip gilt auch für andere Bildtypen. Achten Sie jedoch darauf, dass Sie die Variable „image-type“ durch den entsprechenden Bildtyp ersetzen, z. B. „IR“ oder „color“.

// 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);

Nächste Schritte

Sie wissen nun, wie Sie mit dem Azure Kinect-Gerät die Kamerabilder zwischen Farb- und Tiefenkamera aufnehmen und kombinieren. Sie haben folgende weitere Möglichkeiten: