本文內容
● 配置并啟動(dòng)設備
● 穩定
● 重Capture中獲取Image
● 獲取圖像數據
● 后續步驟
本頁(yè)面詳細介紹了通過(guò)Femto Bolt獲取深度和彩色圖像數據的方法。 獲取圖像數據前,需要先打開(kāi)設備,并通過(guò)配置開(kāi)啟數據流,然后就可以獲取圖像數據。
在配置和獲取圖像數據之前,必須查找并打開(kāi)設備。
你可以參考 streaming sample, 這個(gè)例子演示了如何使用本文中描述的函數。
本文將介紹以下函數:
● k4a_capture_get_depth_image()
配置并啟動(dòng)設備
Femto Bolt 深度相機和彩色相機支持多種模式、分辨率和輸出格式。 有關(guān)完整列表,請參考硬件規格。
流配置是通過(guò) 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;
}相機啟動(dòng)后便不斷捕獲數據,直到調用k4a_device_stop_cameras()函數或設備Close。
穩定
使用多設備同步功能時(shí),我們強烈建議使用固定的曝光設置。 如果使用自動(dòng)曝光,最多可能需要20 幀,圖像和幀速率才能穩定。
從Device中獲取Capture對象
開(kāi)啟視頻流后,Capture用來(lái)獲取圖像數據,每個(gè)Capture包含深度圖像、IR 圖像、彩色圖像或這些圖像的組合。
默認情況下,API 只會(huì )在收到流模式請求的所有圖像后才返回捕獲。 可以通過(guò)將 k4a_device_configuration_t 的 synchronized_images_only 參數配置為 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對象時(shí),必須調用 k4a_capture_release()。
從Capture中獲取Image
若要獲取Capture中包含的圖像,請針對不同的圖像類(lèi)型調用相應的函數。
● k4a_capture_get_color_image()
● k4a_capture_get_depth_image()
獲取完圖像數據后,需要調用k4a_image_release()釋放k4a_image_t句柄。
獲取圖像數據
k4a_image_t 提供了獲取圖像屬性的相應函數。
如要獲取圖像的內存緩沖區,請使用 k4a_image_get_buffer。
以下示例演示如何從Capture中獲取深度圖像,獲取IR和彩色圖像的方法類(lèi)似。 必須將圖像類(lèi)型變量替換為正確的圖像類(lèi)型,例如 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);后續步驟