Извлечение данных изображения Azure Kinect

На этой странице приводятся сведения о том, как получать изображения из Kinect Azure. В статье представлено, как захватывать кадры и получать доступ к изображениям, скоординированным по цвету и глубине на устройстве. Чтобы получить доступ к изображениям, необходимо сначала открыть и настроить устройство, только после этого вы сможете захватывать изображения. Перед настройкой и записью образа необходимо Найти и открыть устройство.

Можно также обратиться к Примеру SDK Enumerate, в котором показано, как использовать функции, описанные в этой статье.

Рассматриваются следующие функции:

Настройка и запуск устройства

Две камеры, имеющиеся на устройстве Kinect, поддерживают несколько режимов, разрешений и выходных форматов. Полный список см. в разделе Спецификации оборудования для набора 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() или пока устройство не будет закрыто.

Стабилизация

При запуске устройств с помощью функции синхронизации нескольких устройств настоятельно рекомендуется пользоваться настройкой фиксированной экспозиции. При проведении ручной настройки экспозиции может потребоваться до восьми захватов кадра с устройства, прежде чем картинка и частота кадров стабилизируются. При автоматической экспозиции может потребоваться до 20 захватов, прежде чем картинка и частота кадров стабилизируются.

Получение захваченного кадра на устройстве

Кадры изображения захватываются на устройстве согласованным образом. Каждый захваченный кадр содержит представление глубины, инфракрасное и цветовое представление или сочетание этих представлений.

По умолчанию API возвращает только тот захваченный кадр, который получил все представления, запрошенные в режиме потоковой передачи. Вы можете настроить API так, чтобы он возвращал частичные захваты — только с глубиной или цветом, как только они станут доступны, очистив параметр synchronized_images_only в 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;
}

После того как API успешно вернул запись, необходимо вызвать k4a_capture_release(), когда вы завершите работу с объектом захвата.

Получить изображение из захваченного кадра

Чтобы получить захваченную картинку, вызовите соответствующую функцию для каждого типа представления. Одно из двух значений:

Необходимо вызвать k4a_image_release() для любого дескриптора k4a_image_t, возвращаемого этими функциями, после завершения работы с изображением.

Доступ к буферам изображений

k4a_image_t имеет множество функций доступа для получения свойств изображения.

Чтобы получить доступ к буферу памяти изображения, используйте k4a_image_get_buffer.

В следующем примере представлено, как получить доступ к захваченному представлению глубины. Этот же принцип применяется к другим типам представлений. Однако убедитесь, что переменная типа представления заменена правильно, например инфракрасное или цветное.

// 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. Вы также можете ознакомиться: