Open3DでRGB-Dデータの統合 でカラー画像、デプス画像を読み込んで以下のようにRGBDImageを生成する必要があった。 std::shared_ptr rgbd_img; rgbd_img = open3d::geometry::RGBDImage::CreateFromColorAndDepth(rgb, depth, depth_scale, depth_trunc, false); Open3Dにも画像の読み込みを行うための関数が用意されているが、OpenCVで既に書いているプログラムをベースにする場合は、OpenCVのcv::Mat形式からOpen3Dのopen3d::geometry::Image形式に変換できると都合が良い。ということで、cv::MatからOpen3Dの画像形式への変換を行ってみた。カラー画像の変換は以下のようにするとうまくいった。OpenCVはBGR、Open3DはRGBなので、まず、カラーチャンネルの入れ替えを行っている。 cv::Mat3b rgb_img; cv::cvtColor(bgr_img, rgb_img, cv::COLOR_BGR2RGB); open3d::geometry::Image rgb; rgb.Prepare(rgb_img.cols, rgb_img.rows, rgb_img.channels(), sizeof(uchar)); memcpy(rgb.data_.data(), rgb_img.data, rgb_img.rows * rgb_img.cols * rgb_img.channels() * sizeof(uchar)); 同様にデプス画像は以下のようにすることで変換できた。ただし、デプス画像depth_imgは16bitのpngで保存されているものを読み込んでいる。 open3d::geometry::Image depth; depth.Prepare(depth_img.cols, depth_img.rows, depth_img.channels(), sizeof(short)); memcpy(depth.data_.data(), depth_img.data,