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å referera till SDK-strömningsexemplet som visar hur du använder funktionerna i den här artikeln.
Följande funktioner beskrivs:
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()
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 det anropas k4a_device_stop_cameras()
eller enheten stängs.
Stabilisering
När du startar enheter med funktionen för synkronisering av flera enheter rekommenderar vi starkt att du gör det med hjälp av en fast exponeringsinställning. 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 bild från avbildningen
Om du vill hämta en avbildning anropar du lämplig funktion för varje bildtyp. En av:
Du måste anropa k4a_image_release()
alla k4a_image_t
referenser som returneras av dessa funktioner när du är klar med avbildningen.
Komma åt bildbuffertar
k4a_image_t
har många accessorfunktioner för att hämta egenskaper för avbildningen.
Om du vill komma åt avbildningens minnesbuffert använder du k4a_image_get_buffer.
I följande exempel visas hur du får åtkomst till 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 avbildar och samordnar kamerornas bilder mellan färg och djup med hjälp av din Azure Kinect-enhet. Du kan också: