Condividi tramite


Recuperare i dati dell'immagine di Azure Kinect

Questa pagina fornisce informazioni dettagliate su come recuperare immagini da Azure Kinect. L'articolo illustra come acquisire e accedere alle immagini coordinate tra il colore e la profondità del dispositivo. Per accedere alle immagini, è prima necessario aprire e configurare il dispositivo, quindi è possibile acquisire immagini. Prima di configurare e acquisire un'immagine, è necessario Trovare e aprire il dispositivo.

È anche possibile fare riferimento all'esempio di streaming SDK che dimostra come utilizzare le funzioni in questo articolo.

Vengono illustrate le funzioni seguenti:

Configurare e avviare il dispositivo

Le due fotocamere disponibili nel dispositivo Kinect supportano più modalità, risoluzioni e formati di output. Per un elenco completo, consultare le specifiche hardware del kit di sviluppo Azure Kinect .

La configurazione dello streaming viene impostata usando i valori nella struttura 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 volta avviate le fotocamere, continueranno a acquisire i dati fino a quando non viene chiamato k4a_device_stop_cameras() o il dispositivo viene chiuso.

Stabilizzazione

Quando si avviano i dispositivi usando la funzionalità di sincronizzazione multi-dispositivo, è consigliabile farlo usando un'impostazione di esposizione fissa. Con un set di esposizione manuale, possono essere necessarie fino a otto acquisizioni dal dispositivo prima che le immagini e la frequenza dei fotogrammi si stabilizzano. Con l'esposizione automatica, possono essere necessarie fino a 20 acquisizioni prima che le immagini e la frequenza dei fotogrammi si stabilizzano.

Ottenere un'acquisizione dal dispositivo

Le immagini vengono acquisite dal dispositivo in modo correlato. Ogni immagine acquisita contiene un'immagine di profondità, un'immagine a infrarossi, un'immagine a colori o una combinazione di immagini.

Per impostazione predefinita, l'API restituirà un'acquisizione solo dopo aver ricevuto tutte le immagini richieste per la modalità di streaming. È possibile configurare l'API per restituire acquisizioni parziali con solo immagini di profondità o colori non appena sono disponibili cancellando il parametro synchronized_images_only del 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;
}

Dopo che l'API ha restituito correttamente un'acquisizione, è necessario chiamare k4a_capture_release() al termine dell'uso dell'oggetto capture.

Ottenere un'immagine dall'acquisizione

Per recuperare un'immagine acquisita, chiamare la funzione appropriata per ogni tipo di immagine. Uno dei seguenti:

Una volta terminato l'uso dell'immagine, è necessario chiamare k4a_image_release() su qualsiasi handle k4a_image_t che sia stato restituito da queste funzioni.

Accedere ai buffer delle immagini

k4a_image_t dispone di molte funzioni di accesso per ottenere le proprietà dell'immagine.

Per accedere al buffer di memoria dell'immagine, usare k4a_image_get_buffer.

L'esempio seguente illustra come accedere a un'immagine di profondità acquisita. Questo stesso principio si applica ad altri tipi di immagine. Tuttavia, assicurarsi di sostituire la variabile di tipo immagine con il tipo di immagine corretto, ad esempio ir o colore.

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

Passaggi successivi

Ora si sa come acquisire e coordinare le immagini delle fotocamere tra il colore e la profondità, usando il dispositivo Azure Kinect. È anche possibile: