7

I have a point of the type pcl::PointXYZRGBA. How can I assign/change its rgb values?

For changing xyz coordinates, I can simply do point.x = some_value.

Oszkar
  • 687
  • 1
  • 5
  • 20
  • 1
    The class `Point` does not seems to exist in the Pcl doc... I can only find [pcl::PointXYZRGBA](http://docs.pointclouds.org/trunk/structpcl_1_1_point_x_y_z_r_g_b_a.html). – Synxis Apr 14 '13 at 14:24
  • @Synxis : You are right. I am referring to an instance named 'point' of the class pcl::PointXYZRGBA . –  Apr 14 '13 at 14:42
  • Can't you use `getRGBEigen3i()`, or `point.r` (and same for `g`and `b`) ? – Synxis Apr 14 '13 at 14:46
  • @Synxis : with getRGBEigen3i(), I cannot replace them. About using point.r, I found a thread on pcl-users forum that said otherwise. –  Apr 14 '13 at 14:52
  • i've replaced one of your tags, the correct one is point-cloud-library – Oszkar May 23 '13 at 13:50

2 Answers2

10

Or just use

point.r = 255;
point.b = 0;
point.g = 0;
point.a = 255;
Deepfreeze
  • 1,755
  • 1
  • 13
  • 18
4

You can use pcl::PointXYZRGB instead of pcl::PointXYZRGBA. I think they both do the same. And then to color a point red (255,0,0), you can do:

pcl::PointXYZRGB point = pcl::PointXYZRGB(255, 0, 0);

And the xyz-coordinates can then be assigned respectively:

point.x = x;
point.y = y;
point.z = z;

EDIT: Or if you have to stick with pcl::PointXYZRGBA, you can do

pcl::PointXYZRGBA point;
uint8_t r = 255;
uint8_t g = 0;
uint8_t b = 0;
int32_t rgb = (r << 16) | (g << 8) | b; 
point.rgba = *(float *)(&rgb); // makes the point red
Fei
  • 1,187
  • 1
  • 16
  • 35