Dela via


Hämta Azure Kinect-avbildningsdata

Den här sidan innehåller information om hur du hämtar bilder från Azure Kinect. Artikeln visar hur du samlar in och kommer åt bilder som samordnas mellan enhetens färg och djup. För att få åtkomst till avbildningar måste du först öppna och konfigurera enheten, sedan kan du ta bilder. Innan du konfigurerar och avbildar en avbildning måste du hitta och öppna enheten.

Du kan också läsa SDK-strömningsexemplet som visar hur du använder funktionerna i den här artikeln.

Följande funktioner beskrivs:

Konfigurera och starta enheten

De två kameror som är tillgängliga på din Kinect-enhet stöder flera lägen, upplösningar och utdataformat. En fullständig lista finns i maskinvaruspecifikationerna för Azure Kinect Development Kit.

Strömningskonfigurationen anges med hjälp av värden i k4a_device_configuration_t strukturen.

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

När kamerorna har startats fortsätter de att samla in data tills de anropas k4a_device_stop_cameras() eller enheten stängs.

Stabilisering

När du startar enheter med synkroniseringsfunktionen för flera enheter rekommenderar vi starkt att du gör det med en inställning för fast exponering. Med en manuell exponeringsuppsättning kan det ta upp till åtta bilder från enheten innan bilderna och framerate stabiliseras. Med automatisk exponering kan det ta upp till 20 bilder innan bilder och framerate stabiliseras.

Hämta en avbildning från enheten

Bilder tas från enheten på ett korrelerat sätt. Varje avbildad bild innehåller en djupbild, en IR-bild, en färgbild eller en kombination av bilder.

Som standard returnerar API:et endast en avbildning när den har tagit emot alla begärda bilder för strömningsläget. Du kan konfigurera API:et för att returnera partiella avbildningar med endast djup- eller färgbilder så snart de är tillgängliga genom att rensa parametern synchronized_images_only för 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;
}

När API:et har returnerat en avbildning måste du anropa k4a_capture_release() när du har slutfört med avbildningsobjektet.

Hämta en avbildning från avbildningen

Om du vill hämta en avbildning anropar du lämplig funktion för varje bildtyp. Något av:

Du måste anropa k4a_image_release() på alla k4a_image_t referenser som returneras av dessa funktioner när du är klar med avbildningen.

Åtkomst till bildbuffertar

k4a_image_t har många accessor-funktioner för att hämta egenskaper för avbildningen.

Använd k4a_image_get_buffer för att komma åt bildens minnesbuffert.

I följande exempel visas hur du kommer åt en avbildad djupbild. Samma princip gäller för andra bildtyper. Se dock till att du ersätter variabeln av bildtyp med rätt bildtyp, till exempel IR eller färg.

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

Nästa steg

Nu vet du hur du samlar in och samordnar kamerornas bilder mellan färg och djup med hjälp av din Azure Kinect-enhet. Du kan också: