RealSense SDK2.0とOpenCVを組み合わせて使う
はじめに
RealSense SDK2.0とOpenCVを組み合わせて使いたいって機会はとても多いと思います。
少なくとも僕はそうなりました。
そこで、今回はRealSense Depth Cameraでキャプチャした画像をOpenCVで取り扱う簡単なサンプルを作りたいと思います。
設定方法
まずは、RealSense SDKとOpenCVの両ライブラリをプロジェクトに取り込みます。
ここはVisual Studioで外部ライブラリを取り込む際の手順と変わりません。
- ソリューションエクスプローラーにあるソリューションファイルを右クリック→プロパティを開く。
- すべての構成を選択したうえで、構成プロパティ→C/C++→全般にある、追加のインクルードディレクトリという項目に、両ライブラリのincludeフォルダまでのフルパスを追加。opencv/build/include と Intel RealSense SDK 2.0/includeといった感じです。追加出来たら適用を押します。
- 次に、構成プロパティ→リンカー→全般にある、追加のライブラリディレクトリという項目に、両ライブラリのlibファイルがあるフォルダまでのフルパスを追加。opencv/build/x64/vc14/lib と Intel RealSense SDK 2.0/lib/x64にあるはずなので、そこまでのパスを追加します。追加出来たら適用を押しましょう。
- 次に、構成をDebugに変更し、構成プロパティ→リンカー→入力にある、追加の依存ファイルという項目に、両ライブラリのlibファイルの名前を追加します。opencv_world331d.libとrealsense2.libを追加して適用します。
コード
結論から言うと、Githubのreadameに全てが載っています。こっちも参考にしてみてください。
今回はリンク先のコードを参考にして、RealSenseでキャプチャした映像をOpenCVを利用して表示するコードを書いてみました。
#include <librealsense2/rs.hpp> #include <opencv2/opencv.hpp> using namespace std; int main() { //デバイスを抽象化するパイプラインを構築 rs2::pipeline pipe; //パイプラインの設定 rs2::config cfg; //明示的にストリームを有効化する //640×480のカラーストリーム画像を、BGR8フォーマット、30fpsで取得するように設定 cfg.enable_stream(RS2_STREAM_COLOR, 640, 480, RS2_FORMAT_BGR8, 30); //設定を適用してパイプラインストリーミングを開始 pipe.start(cfg); while (true) { //ストリームがフレームセットを取得するまで待機 rs2::frameset frames = pipe.wait_for_frames(); //フレームセットからカラーフレームを取得 rs2::frame color = frames.get_color_frame(); //カラーフレームから、OpenCVのMatを作成 cv::Mat frame(cv::Size(640, 480), CV_8UC3, (void*)color.get_data(), cv::Mat::AUTO_STEP); //画像を表示 cv::imshow("window", frame); //qを押すと終了 int key = cv::waitKey(1); if (key == 113) { break; } } //全てのウィンドウを閉じる cv::destroyAllWindows(); return 0; }
このコードを実行すると、RealSenseのRGBカメラで撮影している映像がリアルタイムで画面に表示されるはずです。