Udostępnij za pośrednictwem


Pobieranie danych obrazu zestawu Azure Kinect

Ta strona zawiera szczegółowe informacje na temat pobierania obrazów z zestawu Azure Kinect. W tym artykule pokazano, jak przechwytywać i uzyskiwać dostęp do obrazów skoordynowanych między kolorem i głębią urządzenia. Aby uzyskać dostęp do obrazów, musisz najpierw otworzyć i skonfigurować urządzenie, a następnie przechwycić obrazy. Przed skonfigurowaniem i przechwyceniem obrazu należy znaleźć i otworzyć urządzenie.

Możesz również zapoznać się z przykładem przesyłania strumieniowego zestawu SDK, który pokazuje, jak używać funkcji w tym artykule.

Omówiono następujące funkcje:

Konfigurowanie i uruchamianie urządzenia

Dwie kamery dostępne na urządzeniu Kinect obsługują wiele trybów, rozdzielczości i formatów wyjściowych. Pełną listę można znaleźć w artykule Azure Kinect Development Kit hardware specifications (Specyfikacje sprzętu zestawu Azure Kinect Development Kit).

Konfiguracja przesyłania strumieniowego k4a_device_configuration_t jest ustawiana przy użyciu wartości w strukturze.

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

Po uruchomieniu aparatów będą nadal rejestrować dane do momentu k4a_device_stop_cameras() wywołania lub zamknięcia urządzenia.

Stabilizacja

Podczas uruchamiania urządzeń przy użyciu funkcji synchronizacji wielu urządzeń zdecydowanie zaleca się użycie ustawienia stałej ekspozycji. W przypadku zestawu ekspozycji ręcznej może upłynąć do ośmiu przechwytywania z urządzenia, zanim obrazy i stabilizacja klatek ramowych. Dzięki automatycznej ekspozycji może upłynąć do 20 przechwytywania przed obrazami i stabilizacją szybkości klatek.

Pobieranie przechwytywania z urządzenia

Obrazy są przechwytywane z urządzenia w skorelowany sposób. Każdy przechwycony obraz zawiera obraz głębokości, obraz IR, obraz koloru lub kombinację obrazów.

Domyślnie interfejs API zwróci przechwytywanie tylko po odebraniu wszystkich żądanych obrazów dla trybu przesyłania strumieniowego. Interfejs API można skonfigurować tak, aby zwracał częściowe przechwytywanie tylko z obrazami głębokości lub kolorów, gdy tylko będą dostępne, usuwając synchronized_images_only parametr .k4a_device_configuration_t

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

Gdy interfejs API pomyślnie zwrócił przechwytywanie, należy wywołać k4a_capture_release() metodę po zakończeniu korzystania z obiektu przechwytywania.

Pobieranie obrazu z przechwytywania

Aby pobrać przechwycony obraz, wywołaj odpowiednią funkcję dla każdego typu obrazu. Jeden z:

Po zakończeniu korzystania z obrazu należy wywołać k4a_image_release() dowolny k4a_image_t uchwyt zwrócony przez te funkcje.

Uzyskiwanie dostępu do obrazów

k4a_image_t ma wiele funkcji dostępu, aby uzyskać właściwości obrazu.

Aby uzyskać dostęp do buforu pamięci obrazu, użyj k4a_image_get_buffer.

W poniższym przykładzie pokazano, jak uzyskać dostęp do przechwyconego obrazu głębokości. Ta sama zasada dotyczy innych typów obrazów. Pamiętaj jednak, aby zastąpić zmienną typu obrazu poprawnym typem obrazu, takim jak środowisko IR lub kolor.

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

Następne kroki

Teraz wiesz, jak przechwytywać i koordynować obrazy kamer między kolorem i głębią, korzystając z urządzenia Azure Kinect. Możesz również wykonywać następujące czynności: