从PCD文件解包点云的RGB值

时间:2018-07-24 14:28:44

标签: c++ point-cloud-library

我在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。

0 个答案:

没有答案