Спецификация окраски c точек в облаке точек - PullRequest
0 голосов
/ 24 января 2020

Мне нужна помощь в раскраске, укажите c точек в облаке точек. У меня есть индексы точек, которые нужно раскрасить. В настоящее время облако точек окрашивается с помощью pcl :: visualization :: PointCloudColorHandlerGenericField для указанного поля c в типе точки. И я нарисовал 3D окно, которое содержит точки, которые должны быть окрашены по-разному. В настоящее время точки, которые l ie в окне 3D, также были окрашены с использованием pcl :: visualization :: PointCloudColorHandlerGenericField.

Невозможно прикрепить изображение из-за репутации.

1 Ответ

0 голосов
/ 28 февраля 2020

Надеюсь, это вам поможет,

Сначала вы должны извлечь индексы указанных 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;
}
...