共用方式為


擷取 Azure Kinect 影像資料

此頁面提供如何透過 Azure Kinect 擷取影像的詳細資料。 本文示範如何擷取及存取已在裝置上協調色彩和深度的影像。 若要存取影像,您必須先開啟並設定裝置,才能擷取影像。 在設定及擷取影像前,必須先尋找並開啟裝置

您也可參閱 SDK 串流範例,文中將示範如何使用本文的函數。

涵蓋的函式如下:

設定並啟動裝置

Kinect 裝置有兩部相機,支援多種模式、解析度和輸出格式。 如需完整清單,請參閱 Azure Kinect 開發套件硬體規格

串流組態使用 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;
}

一旦啟動相機便會繼續擷取資料,直到 k4a_device_stop_cameras() 呼叫或裝置關閉為止。

穩定

使用多重裝置同步處理功能啟動裝置時,強烈建議使用固定曝光設定來執行此動作。 若使用手動曝光設定,在影像和畫面播放速率穩定前,最多可能要從裝置擷取八次。 若使用自動曝光,在影像和畫面播放速率穩定前,最多可能要擷取 20 次。

從裝置取得擷取內容

從裝置擷取的影像間彼此關聯。 每個擷取的影像皆包含深度影像、IR 影像、色彩影像或影像組合。

依預設,API 只會在串流模式收到所有要求的影像後,才會傳回擷取內容。 您可清除 k4a_device_configuration_tsynchronized_images_only 參數,設定 API 傳回只具有深度或色彩影像的部分擷取內容。

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

API 已成功傳回擷取內容後,便須在使用完擷取物件時呼叫 k4a_capture_release()

取得擷取的影像

若要取得擷取的影像,請依各影像類型呼叫適當的函數。 值為下列其中之一:

使用完影像後,您必須以這些函數所傳回的 k4a_image_t 控制代碼呼叫 k4a_image_release()

存取影像緩衝區

k4a_image_t 有許多存取子函數可取得影像的屬性。

若要存取影像的記憶體緩衝區,請使用 k4a_image_get_buffer

下列範例示範如何存取擷取的深度影像。 這項原則亦適用於其他影像類型。 但請確定將影像類型變數取代為正確的影像類型,例如 IR 或色彩。

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

下一步

現在您已了解如何使用 Azure Kinect 裝置擷取相機影像,並協調色彩和深度。 您也可: