Freigeben über


Abrufen von Azure Kinect-Bilddaten

Diese Seite enthält Details zum Abrufen von Bildern aus Azure Kinect. In diesem Artikel wird veranschaulicht, wie Bilder zwischen der Farbe und der Tiefe des Geräts erfasst und abgerufen werden können. Um auf Bilder zuzugreifen, müssen Sie zuerst das Gerät öffnen und konfigurieren, dann können Sie Bilder erfassen. Bevor Sie ein Image konfigurieren und erfassen, müssen Sie das Gerätfinden und öffnen.

Sie können auch auf das SDK Streaming-Beispiel verweisen, das die Verwendung der Funktionen in diesem Artikel veranschaulicht.

Die folgenden Funktionen werden behandelt:

Konfigurieren und Starten des Geräts

Die beiden Kameras, die auf Ihrem Kinect-Gerät verfügbar sind, unterstützen mehrere Modi, Auflösungen und Ausgabeformate. Eine vollständige Liste finden Sie im Azure Kinect Development Kit Hardwarespezifikationen.

Die Streamingkonfiguration wird mithilfe von Werten in der k4a_device_configuration_t-Struktur 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;
}

Sobald Kameras gestartet wurden, erfassen sie weiterhin Daten, bis k4a_device_stop_cameras() aufgerufen oder das Gerät geschlossen wird.

Stabilisierung

Beim Starten von Geräten mit dem Feature für die Synchronisierung mit mehreren Geräten wird dringend empfohlen, dies mit einer festen Belichtungseinstellung zu tun. Mit einem manuellen Belichtungssatz kann es bis zu acht Aufnahmen vom Gerät dauern, bevor Bilder und Framerate stabilisiert werden. Bei der automatischen Belichtung kann es bis zu 20 Aufnahmen dauern, bevor Bilder und Framerate stabilisiert werden.

Rufe eine Aufnahme vom Gerät ab

Bilder werden auf korrelierte Weise vom Gerät erfasst. Jedes aufgenommene Bild enthält ein Tiefenbild, ein IR-Bild, ein Farbbild oder eine Kombination aus Bildern.

Standardmäßig gibt die API nur eine Aufnahme zurück, nachdem sie alle angeforderten Bilder für den Streamingmodus empfangen hat. Sie können die API so konfigurieren, dass Teilaufnahmen nur mit Tiefen- oder Farbbildern zurückgegeben werden, sobald sie verfügbar sind, indem Sie den synchronized_images_only Parameter der k4a_device_configuration_tlö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 erfolgreich eine Aufzeichnung zurückgegeben hat, müssen Sie k4a_capture_release() aufrufen, wenn Sie die Verwendung des Aufnahmeobjekts abgeschlossen haben.

Abrufen eines Bilds aus der Aufnahme

Rufen Sie zum Abrufen eines aufgenommenen Bilds die entsprechende Funktion für jeden Bildtyp auf. Einer von:

Sie müssen k4a_image_release() für alle k4a_image_t Handle aufrufen, die von diesen Funktionen zurückgegeben werden, sobald Sie mit dem Bild fertig sind.

Zugreifen auf Bildpuffer

k4a_image_t verfügt über viele Accessorfunktionen, um Eigenschaften des Bilds abzurufen.

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

Im folgenden Beispiel wird veranschaulicht, wie Auf ein aufgenommenes Tiefenbild zugegriffen wird. Dieses Prinzip gilt auch für andere Bildtypen. Stellen Sie jedoch sicher, dass Sie die Bildtypvariable durch den richtigen Bildtyp ersetzen, z. B. IR oder Farbe.

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

Jetzt wissen Sie, wie Sie die Bilder der Kameras zwischen Farbe und Tiefe mit Ihrem Azure Kinect-Gerät erfassen und koordinieren. Sie haben auch folgende Möglichkeiten: