上一個教程: 使用 Orbbec 3D 相機 (UVC)
下一個教程: 在 Ubuntu 中使用 Wayland highgui 後端
硬體
注意:此教程已部分過時,因為 PerC SDK 已被 RealSense SDK 取代
與 Intel® RealSense SDK 相容的深度感測器透過 VideoCapture 類支援。可以使用 VideoCapture 的熟悉介面檢索深度圖、RGB 影像和其他一些格式的輸出。
為了在 OpenCV 中使用深度感測器,您應該執行以下初步步驟
- 安裝 Intel RealSense SDK 2.0(從這裡 https://github.com/IntelRealSense/librealsense)。
- 透過在 CMake 中設定 WITH_LIBREALSENSE 標誌,使用 Intel RealSense SDK 支援配置 OpenCV。如果在安裝資料夾中找到 Intel RealSense SDK,則將使用 Intel Realsense SDK 庫構建 OpenCV(請參閱 CMake 日誌中的 LIBREALSENSE 狀態)。
- 構建 OpenCV。
VideoCapture 可以檢索以下資料
- 來自深度生成器的資料
- CAP_INTELPERC_DEPTH_MAP - 每個畫素是一個 16 位整數。該值表示從物件到相機 XY 平面或笛卡爾深度的距離。(CV_16UC1)
- CAP_INTELPERC_UVDEPTH_MAP - 每個畫素包含兩個 32 位浮點值,範圍為 0-1,表示深度座標到顏色座標的對映。(CV_32FC2)
- CAP_INTELPERC_IR_MAP - 每個畫素是一個 16 位整數。該值表示反射雷射束的強度。(CV_16UC1)
- 從 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 用法示例。