Надеюсь, это вам поможет,
Сначала вы должны извлечь индексы указанных c точек в pointcloud, используя pcl::ExtractIndices
, и сохранить их в новой переменной pointcloud,
, а затем этот пример кода может использоваться в качестве ссылки
inline float PackRGB(uint8_t r,uint8_t g,uint8_t b) {
uint32_t color_uint = ((uint32_t)r << 16 | (uint32_t) g << 8 | (uint32_t)b);
return *reinterpret_cast<float*>(&color_uint);
}
int main(){
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>()); //your cloud that you want to colorize
cloud->width = (1000000);
cloud->height = 1;
cloud->points.resize(cloud->width * cloud->height);
for(auto &it : cloud->points){
it.x = 1024 * rand() / (RAND_MAX + 1.0f);
it.y = 1024 * rand() / (RAND_MAX + 1.0f);
it.z = 1024 * rand() / (RAND_MAX + 1.0f);
it.rgb = PackRGB(63, 81, 181);
}
pcl::io::savePCDFileASCII("cloudname.pcd", *cloud);
return 0;
}