knorth55のぼんやり日記

制御とかプログラミングとかを勉強している機械系大学生の備忘録です。

C++でuint8配列に32FC1などのfloat配列を格納する

Depth Imageは32FC1などのfloat型(32bit, 4byte)の配列である場合があります。
しかしROSのsensor_msgs/Imageのdataはuint8_t型(8bit, 1byte)の配列であり直接追加することはできません。

ここでやるべきことはfloat型を4つのuin8_tに分割する変換です。
floatの配列からuint8_t型の配列への変換はmemcopyを使うことでできますが、pixel単位での変換ではありません。
pixel単位で行う場合は以下のように行います。

  float depth_pixel;
  uint8_t *depth_pixel_array = reinterpret_cast<uint8_t *>(&depth_pixel);

これをsensor_msgs/Imageのdataに順に格納していけばOKです。


具体的な32FC1の変換は以下のGistです。