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:
k4a_device_start_cameras()
k4a_device_get_capture()
k4a_capture_get_depth_image()
k4a_image_get_buffer()
k4a_image_release()
k4a_capture_release()
k4a_device_stop_cameras()
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_t
do .
// 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: