Partilhar via


Recuperar dados de imagem do Azure Kinect

Esta página fornece detalhes sobre como recuperar imagens do Azure Kinect. O artigo demonstra como capturar e acessar imagens coordenadas entre a cor e a profundidade do dispositivo. Para acessar imagens, você deve primeiro abrir e configurar o dispositivo, em seguida, você pode capturar imagens. Antes de configurar e capturar uma imagem, você deve Localizar e abrir o dispositivo.

Você também pode consultar o exemplo de streaming do SDK que demonstra como usar as funções neste artigo.

São abrangidas as seguintes funções:

Configurar e iniciar o dispositivo

As duas câmaras disponíveis no dispositivo Kinect suportam vários modos, resoluções e formatos de saída. Para obter uma lista completa, consulte as especificações de hardware do Kit de Desenvolvimento do Kinect do Azure.

A configuração de streaming é definida usando valores na k4a_device_configuration_t estrutura.

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

Assim que as câmeras forem iniciadas, elas continuarão a capturar dados até k4a_device_stop_cameras() que sejam chamadas ou o dispositivo seja fechado.

Estabilização

Ao iniciar dispositivos usando o recurso de sincronização de vários dispositivos, é altamente recomendável fazê-lo usando uma configuração de exposição fixa. Com um conjunto de exposição manual, ele pode levar até oito capturas do dispositivo antes que as imagens e a taxa de quadros se estabilizem. Com a exposição automática, pode levar até 20 capturas antes que as imagens e a taxa de quadros se estabilizem.

Obter uma captura do dispositivo

As imagens são capturadas a partir do dispositivo de forma correlacionada. Cada imagem capturada contém uma imagem de profundidade, uma imagem IR, uma imagem colorida ou uma combinação de imagens.

Por padrão, a API só retornará uma captura depois de receber todas as imagens solicitadas para o modo de streaming. Você pode configurar a API para retornar capturas parciais apenas com imagens coloridas ou de profundidade assim que estiverem disponíveis, limpando o synchronized_images_only parâmetro k4a_device_configuration_tdo .

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

Depois que a API retornar com êxito uma captura, você deverá ligar k4a_capture_release() quando tiver concluído o uso do objeto de captura.

Obter uma imagem da captura

Para recuperar uma imagem capturada, chame a função apropriada para cada tipo de imagem. Um dos seguintes:

Você deve chamar k4a_image_release() qualquer k4a_image_t identificador retornado por essas funções assim que terminar de usar a imagem.

Acessar buffers de imagem

k4a_image_t tem muitas funções de acessador para obter propriedades da imagem.

Para acessar o buffer de memória da imagem, use k4a_image_get_buffer.

O exemplo a seguir demonstra como acessar uma imagem de profundidade capturada. Este mesmo princípio aplica-se a outros tipos de imagem. No entanto, certifique-se de substituir a variável de tipo de imagem pelo tipo de imagem correto, como IR ou cor.

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

Próximos passos

Agora você sabe como capturar e coordenar as imagens das câmeras entre a cor e a profundidade, usando seu dispositivo Azure Kinect. Você também pode: