本文內容
● 配置并啟動設備
● 穩(wěn)定
● 重Capture中獲取Image
● 獲取圖像數據
● 后續(xù)步驟
本頁面詳細介紹了通過Femto Bolt獲取深度和彩色圖像數據的方法。 獲取圖像數據前,需要先打開設備,并通過配置開啟數據流,然后就可以獲取圖像數據。
在配置和獲取圖像數據之前,必須, 這個例子演示了如何使用本文中描述的函數。
本文將介紹以下函數:
●
●
●
●
●
●
●
配置并啟動設備
Femto Bolt 深度相機和彩色相機支持多種模式、分辨率和輸出格式。 有關完整列表,請參考數據結構配置。
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()函數或設備Close。
穩(wěn)定
使用多設備同步功能時,我們強烈建議使用固定的曝光設置。 如果使用自動曝光,最多可能需要20 幀,圖像和幀速率才能穩(wěn)定。
從Device中獲取Capture對象
開啟視頻流后,Capture用來獲取圖像數據,每個Capture包含深度圖像、IR 圖像、彩色圖像或這些圖像的組合。
默認情況下,API 只會在收到流模式請求的所有圖像后才返回捕獲。 可以通過將 的 參數配置為 false,從而將 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 成功返回Capture后,當你用完Capture對象時,必須調用 。
從Capture中獲取Image
若要獲取Capture中包含的圖像,請針對不同的圖像類型調用相應的函數。
●
●
●
獲取完圖像數據后,需要調用釋放句柄。
獲取圖像數據
提供了獲取圖像屬性的相應函數。
如要獲取圖像的內存緩沖區(qū),請使用 。
以下示例演示如何從Capture中獲取深度圖像,獲取IR和彩色圖像的方法類似。 必須將圖像類型變量替換為正確的圖像類型,例如 ir 或 color。
// 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);
后續(xù)步驟