OpenCV 5.0.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 5.0.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
Orbbec 3Dカメラの利用 (UVC)

前のチュートリアル: Orbbec Astra 3D カメラの使用
次のチュートリアル: Creative Senz3D およびその他の Intel RealSense SDK 互換深度センサーの使用

原著者Jinyue Chen
互換性OpenCV >= 4.10

はじめに

このチュートリアルは、UVCプロトコルに基づく Orbbec の3Dカメラを対象とする。OpenNI に依存する旧型の Orbbec 3Dカメラの使用については、前のチュートリアルを参照のこと。

OpenNI2 SDK 付きでビルドした OpenCV を必要とする OpenNI ベースの Astra 3D カメラの利用とは異なり、OpenCV 経由で Orbbec UVC 3D カメラにアクセスするのに Orbbec SDK のインストールは不要である。cv::VideoCapture クラスを使うことで、USB カメラを扱うのと同様に、3D カメラからストリームデータを取得できる。深度マップとカラー画像のキャリブレーションおよびアライメントは内部で行われる。

手順

3D カメラを OpenCV で使用するには、OpenCV をインストールするための Get Started を参照するとよい。

4.11 以降、Mac OS ユーザーがこれらのカメラを使用するには、フラグ -DOBSENSOR_USE_ORBBEC_SDK=ON を付けてソースから OpenCV をコンパイルする必要があることに注意:

cmake -DOBSENSOR_USE_ORBBEC_SDK=ON ..
make
sudo make install

デフォルトでは、-DOBSENSOR_USE_ORBBEC_SDK=ON が有効な場合、OrbbecSDK v2 が使用される(すなわち ORBBEC_SDK_VERSION のデフォルトは 2)。これは Orbbec Gemini 330 シリーズ全体をサポートする。

Orbbec Femto、Gemini2XL、Astra+ などのレガシーカメラが必要な場合は、フラグ -DORBBEC_SDK_VERSION=1 で OrbbecSDK v1 に切り替える:

cmake -DOBSENSOR_USE_ORBBEC_SDK=ON -DORBBEC_SDK_VERSION=1 ..
make -j
sudo make install

コード

コードの解説

Python

  • Orbbec深度センサーを開く: cv.VideoCapture(0, cv.CAP_OBSENSOR) を使って最初のOrbbec深度センサーデバイスを開こうとする。カメラのオープンに失敗した場合、プログラムは終了し、エラーメッセージを表示する。
  • データの取得と処理のループ: 無限ループの中で、コードはカメラから継続的にデータを取得する。orbbec_cap.grab() メソッドはフレームの取得を試みる。
  • BGR画像の処理: orbbec_cap.retrieve(None, cv.CAP_OBSENSOR_BGR_IMAGE) を使ってBGR画像データを取得する。取得に成功すると、cv.imshow("BGR", bgr_image) を使ってBGR画像をウィンドウに表示する。
  • 深度画像の処理: orbbec_cap.retrieve(None, cv.CAP_OBSENSOR_DEPTH_MAP) を使って深度画像データを取得する。取得に成功すると、まず深度画像を0から255の範囲に正規化し、次に疑似カラー画像を適用して、その結果を cv.imshow("DEPTH", color_depth_map) を使ってウィンドウに表示する。
  • キーボード割り込み: cv.pollKey() を使ってキーボードイベントを検出する。キーが押されると、ループを抜けてプログラムが終了する。
  • リソースの解放: ループを抜けた後、orbbec_cap.release() を使ってカメラリソースを解放する。

C++

  • Orbbec深度センサーを開く: VideoCapture obsensorCapture(0, CAP_OBSENSOR) を使って最初のOrbbec深度センサーデバイスを開こうとする。カメラのオープンに失敗した場合、エラーメッセージが表示され、プログラムは終了する。
  • カメラ内部パラメータの取得: obsensorCapture.get() を使って、焦点距離 (fx, fy) や主点 (cx, cy) を含むカメラの内部パラメータを取得する。
  • データの取得と処理のループ: 無限ループの中で、コードはカメラから継続的にデータを取得する。obsensorCapture.grab() メソッドはフレームの取得を試みる。
  • BGR画像の処理: obsensorCapture.retrieve(image, CAP_OBSENSOR_BGR_IMAGE) を使ってBGR画像データを取得する。取得に成功すると、imshow("BGR", image) を使ってBGR画像をウィンドウに表示する。
  • 深度画像の処理: obsensorCapture.retrieve(depthMap, CAP_OBSENSOR_DEPTH_MAP) を使って深度画像データを取得する。取得に成功すると、深度画像を正規化して疑似カラー画像を適用し、その結果を imshow("DEPTH", adjDepthMap) を使ってウィンドウに表示する。取得される深度値はミリメートル単位であり、300から5000(ミリメートル)の範囲に切り詰められる。この固定範囲は、深度カメラの深度レンジに基づく切り詰めとして解釈でき、深度マップ上の無効なピクセルを除去する。
  • 深度マップをBGR画像に重ね合わせる: 深度マップを8ビット画像に変換し、BGR画像のサイズに合わせてリサイズして、指定した透明度 (alpha) でBGR画像に重ね合わせる。重ね合わせた画像は imshow("DepthToColor", image) を使ってウィンドウに表示する。
  • キーボード割り込み: pollKey() を使ってキーボードイベントを検出する。キーが押されると、ループを抜けてプログラムが終了する。
  • リソースの解放: ループを抜けた後、カメラリソースを解放する。

結果

Python

BGR And DEPTH frame

C++

BGR And DEPTH And DepthToColor frame

注記

  • Macユーザはコードを実行するために sudo 権限が必要である。
  • ファームウェア: Orbbec UVC 3Dカメラを使用している場合、互換性の問題を避けるため、カメラのファームウェアを最新バージョンに更新しておくこと。詳細については Orbbecのリリースノート を参照すること。