Recuperare i dati delle immagini 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 in base al colore e alla profondità del dispositivo. Per accedere alle immagini, è prima necessario aprire e configurare il dispositivo, poi è possibile acquisire immagini. Prima di configurare e acquisire un'immagine, è necessario Trovare e aprire dispositivo.

È anche possibile fare riferimento all'esempio di Streaming SDK che illustra come usare le funzioni in questo articolo.

Vengono illustrate le funzioni seguenti:

Configurare e avviare il dispositivo

Le due fotocamere disponibili sul dispositivo Kinect supportano più modalità, risoluzioni e formati di output. Per un elenco completo, vedere le specifiche hardware di Azure Kinect Development Kit.

La configurazione di streaming viene impostata usando i valori nella k4a_device_configuration_t struttura.

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 eseguita la chiamata k4a_device_stop_cameras() o il dispositivo non viene chiuso.

Stabilizzazione

Quando si avviano i dispositivi usando la funzionalità di sincronizzazione con più dispositivi, si consiglia di usare 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 stabilizzino. Con l'esposizione automatica, possono essere necessarie fino a 20 acquisizioni prima che le immagini e la frequenza dei fotogrammi si stabilizzino.

Fare un'acquisizione dal dispositivo

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

Per impostazione predefinita, l'API restituirà l'acquisizione solo dopo aver ricevuto tutte le immagini richieste per la modalità di streaming. È possibile configurare l'API in modo che restituisca acquisizioni parziali solo di immagini di profondità o a colori appena disponibili deselezionando il synchronized_images_only parametro 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;
}

Una volta che l'API restituisce correttamente un'acquisizione è necessario eseguire la chiamata k4a_capture_release() dopo aver terminato di usare l’oggetto di acquisizione.

Recuperare un'immagine dall'acquisizione

Per recuperare un'immagine acquisita, eseguire la chiamata della funzione appropriata per ogni tipo di immagine. Uno dei valori possibili:

È necessario eseguire la chiamata k4a_image_release() su qualsiasi k4a_image_t handle restituito da queste funzioni dopo aver terminato di usare l'immagine.

Accedere ai buffer delle immagini

k4a_image_t dispone di molte funzioni per accedere alle 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 tipo di immagine con il tipo di immagine corretto, ad esempio IR o a colori.

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

Una volta che si è appreso come acquisire e coordinare le immagini della fotocamera a colori con quelle della fotocamera di profondità, usando il dispositivo Azure Kinect. È anche possibile: