我在ASCII PCD文件中保存了类型为PointCloud<PointXYZRGB>
的点云。以下是此文件的一部分-
# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 38603
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 38603
DATA ascii
1.4766392 -0.82155049 -0.0032610297 1.7976693e-38
1.4766392 -0.81364399 -0.0032610297 1.7884862e-38
1.4766392 -0.80577451 -0.0032610297 1.78845e-38
1.476639 -0.79794157 -0.0032609701 1.7607545e-38
1.476639 -0.79014462 -0.0032609701 1.7883416e-38
1.476639 -0.78238314 -0.0032609701 1.7791942e-38
1.476639 -0.77465671 -0.0032609701 1.769975e-38
1.476639 -0.76696479 -0.0032609701 1.6409733e-38
1.476639 -0.75930673 -0.0032609701 1.6593762e-38
<{1}中的As per the documentation,可以根据下面给出的公式解包颜色值-
PointCloud<PointXYZRGB>
我手动尝试在单独的代码中解压缩的颜色值,发现所有颜色值均为黑色。下面是代码片段-
// unpack rgb into r/g/b
uint32_t rgb = *reinterpret_cast<int*>(&p.rgb);
uint8_t r = (rgb >> 16) & 0x0000ff;
uint8_t g = (rgb >> 8) & 0x0000ff;
uint8_t b = (rgb) & 0x0000ff;
下面是输出-
#include <iostream>
int main()
{
uint32_t rgb = 2.2949836e-38;
uint8_t r = (rgb >> 16) & 0x0000ff;
uint8_t g = (rgb >> 8) & 0x0000ff;
uint8_t b = (rgb) & 0x0000ff;
printf("rgb=%d, r=%d, g=%d, b=%d", rgb, r, g, b);
return 0;
}
我的目标是解压缩PCL中定义的RGB颜色。请注意,我使用的是PCL 1.7.1。