OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項
使用 Creative Senz3D 和其他 Intel RealSense SDK 相容的深度感測器

上一個教程: 使用 Orbbec 3D 相機 (UVC)
下一個教程: 在 Ubuntu 中使用 Wayland highgui 後端

硬體

注意:此教程已部分過時,因為 PerC SDK 已被 RealSense SDK 取代

與 Intel® RealSense SDK 相容的深度感測器透過 VideoCapture 類支援。可以使用 VideoCapture 的熟悉介面檢索深度圖、RGB 影像和其他一些格式的輸出。

為了在 OpenCV 中使用深度感測器,您應該執行以下初步步驟

  1. 安裝 Intel RealSense SDK 2.0(從這裡 https://github.com/IntelRealSense/librealsense)。
  2. 透過在 CMake 中設定 WITH_LIBREALSENSE 標誌,使用 Intel RealSense SDK 支援配置 OpenCV。如果在安裝資料夾中找到 Intel RealSense SDK,則將使用 Intel Realsense SDK 庫構建 OpenCV(請參閱 CMake 日誌中的 LIBREALSENSE 狀態)。
  3. 構建 OpenCV。

VideoCapture 可以檢索以下資料

  1. 來自深度生成器的資料
    • CAP_INTELPERC_DEPTH_MAP - 每個畫素是一個 16 位整數。該值表示從物件到相機 XY 平面或笛卡爾深度的距離。(CV_16UC1)
    • CAP_INTELPERC_UVDEPTH_MAP - 每個畫素包含兩個 32 位浮點值,範圍為 0-1,表示深度座標到顏色座標的對映。(CV_32FC2)
    • CAP_INTELPERC_IR_MAP - 每個畫素是一個 16 位整數。該值表示反射雷射束的強度。(CV_16UC1)
  2. 從 RGB 影像生成器給出的資料
    • CAP_INTELPERC_IMAGE - 彩色影像。(CV_8UC3)

為了從深度感測器獲取深度圖,請使用 VideoCapture::operator >>,例如

VideoCapture capture( CAP_REALSENSE );
for(;;)
{
Mat depthMap;
capture >> depthMap;
if( waitKey( 30 ) >= 0 )
break;
}

為了獲取多個數據圖,請使用 VideoCapture::grab 和 VideoCapture::retrieve,例如

VideoCapture capture(CAP_REALSENSE);
for(;;)
{
Mat depthMap;
Mat image;
Mat irImage;
capture.grab();
capture.retrieve( depthMap, CAP_INTELPERC_DEPTH_MAP );
capture.retrieve( image, CAP_INTELPERC_IMAGE );
capture.retrieve( irImage, CAP_INTELPERC_IR_MAP);
if( waitKey( 30 ) >= 0 )
break;
}

為了設定和獲取感測器資料生成器的某些屬性,請分別使用 VideoCapture::set 和 VideoCapture::get 方法,例如

VideoCapture capture(CAP_REALSENSE);
capture.set( CAP_INTELPERC_DEPTH_GENERATOR | CAP_PROP_INTELPERC_PROFILE_IDX, 0 );
cout << "FPS " << capture.get( CAP_INTELPERC_DEPTH_GENERATOR+CAP_PROP_FPS ) << endl;

由於支援兩種型別的感測器資料生成器(影像生成器和深度生成器),因此應使用兩個標誌來設定/獲取所需生成器的屬性

  • CAP_INTELPERC_IMAGE_GENERATOR – 用於訪問影像生成器屬性的標誌。
  • CAP_INTELPERC_DEPTH_GENERATOR – 用於訪問深度生成器屬性的標誌。如果未設定屬性的兩個可能值中的任何一個,則預設採用此標誌值。

有關更多資訊,請參閱 opencv/samples/cpp 資料夾中的 videocapture_realsense.cpp 用法示例。