Recuperación de datos de imagen de Azure Kinect

En esta página se proporcionan detalles sobre cómo recuperar imágenes de Azure Kinect. En el artículo se muestra cómo capturar imágenes coordinadas entre las cámaras de color y de profundidad del dispositivo y cómo acceder a ellas. Para acceder a las imágenes, primero debe abrir y configurar el dispositivo y luego capturar imágenes. Para configurar y capturar una imagen, debe buscar y abrir un dispositivo.

También puede ver el Ejemplo de transmisión del SDK, donde se muestra cómo usar las funciones de este artículo.

Se explican las siguientes funciones:

Configuración e inicio del dispositivo

Las dos cámaras disponibles en el dispositivo Kinect admiten varios modos, resoluciones y formatos de salida. Para obtener una lista completa, vea las especificaciones de hardware del kit de desarrollo de Azure Kinect.

La configuración de transmisión se establece mediante valores de la estructura 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;
}

Una vez iniciadas las cámaras, siguen capturando datos hasta que se llama a k4a_device_stop_cameras() o se cierra el dispositivo.

Estabilización

Al iniciar dispositivos mediante la característica de sincronización de varios dispositivos, se recomienda encarecidamente hacerlo mediante una configuración de exposición fija. Con un conjunto de exposición manual, pueden ser necesarias hasta ocho capturas del dispositivo para que las imágenes y la velocidad de fotogramas se estabilicen. Con la exposición automática, pueden ser necesarias hasta 20 capturas para que las imágenes y la velocidad de fotogramas se estabilicen.

Obtención de una captura del dispositivo

Las imágenes se capturan del dispositivo de una manera correlacionada. Cada imagen capturada contiene una imagen de profundidad, una imagen de IR, una imagen de color o una combinación de imágenes.

De forma predeterminada, la API solo devuelve una captura una vez que ha recibido todas las imágenes solicitadas para el modo de transmisión. Puede configurar la API de modo que devuelva capturas parciales con solo imágenes de profundidad o de color en cuanto estén disponibles si borra el parámetro synchronized_images_only de 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;
}

Una vez que la API ha devuelto correctamente una captura, debe llamar a k4a_capture_release() si ha terminado de usar el objeto de captura.

Obtención de una imagen de la captura

Para recuperar una imagen capturada, llame a la función adecuada para cada tipo de imagen. Uno de los valores siguientes:

Debe llamar a k4a_image_release() en cualquier identificador k4a_image_t devuelto por estas funciones una vez que haya terminado de usar la imagen.

Acceso a los búferes de imagen

k4a_image_t tiene muchas funciones de descriptores de acceso para obtener propiedades de la imagen.

Para acceder al búfer de memoria de la imagen, use k4a_image_get_buffer.

En el ejemplo siguiente se muestra cómo acceder a una imagen de profundidad capturada. Este mismo principio se aplica a otros tipos de imagen. Pero asegúrese de reemplazar la variable de tipo de imagen por el tipo de imagen correcto, como IR o 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);

Pasos siguientes

Ya sabe cómo capturar y coordinar las imágenes de las cámaras entre el color y la profundidad con el dispositivo Azure Kinect. También puede llevar a cabo: