Добавление двух разных облаков точек в программу просмотра (Библиотека облаков точек (PCL))

Я только начал использовать большую библиотеку облаков точек и хотел отобразить два облака точек в одном средстве просмотра, но каждый в своем цвете.

Когда я использую один объект облака точек (указатель ?!), он работает просто отлично, но если я хочу добавить второй, только второй будет отображаться в средстве просмотра.

Я использую версию 1.6 Pcl и сделал это в значительной степени, как в этом руководство.
Может быть, у вас, ребята, есть предложение.

Соответствующий фрагмент кода ниже. Заранее спасибо!!!

  boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer_two_clouds (new pcl::visualization::PCLVisualizer("3D Viewer"));
viewer_two_clouds->setBackgroundColor(0,0,0);

// cloud: green / cloud2: red
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZRGB> single_color1 (cloud, 0, 255, 0);
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZRGB> single_color2 (cloud2, 255, 0, 0);

//add both
viewer_two_clouds->addPointCloud<pcl::PointXYZRGB> (cloud, single_color1, "sample_cloud_1");
viewer_two_clouds->addPointCloud<pcl::PointXYZRGB> (cloud2, single_color2, "sample_cloud_2");

// set coordinateSystem and init camera
viewer_two_clouds->addCoordinateSystem(1.0);
viewer_two_clouds->initCameraParameters();

while(!viewer_two_clouds->wasStopped())
{
viewer_two_clouds->spinOnce();
boost::this_thread::sleep (boost::posix_time::microseconds(100000));
}

viewer_two_clouds->close();

9

Решение

Чтобы применить преобразования (например, вращения и переводы) к уже загруженному облаку точек, следует использовать pcl::transformPointCloud функция (посмотреть здесь). Эта функция принимает 3 аргумента: входное облако, выходное облако и Eigen::Transform, Просто определите преобразование перевода и введите его в функцию, чтобы правильно перевести ваше облако.

Есть хороший урок Eigen (Вот), который показывает вам, как определить и использовать преобразования пространства.

7

Другие решения

Декстер мне очень помог =)

вот что я использовал для преобразования Pointcloud, чтобы другие тоже могли его использовать!

  void trans ();
{
Eigen::Affine3f t;

pcl::getTransformation(10.0,5.0,20.0,0.0,0.0,0.0,t);
pcl::transformPointCloud(*cloud, *cloud2, t);
}
3

Существуют и другие способы отображения двух облаков точек в одном средстве просмотра. Вы можете создать два разных окна просмотра, некоторые думают так:

viewer_two_clouds->createViewPort (0.0,0.0,0.5,1.0,0);
viewer_two_clouds->setBackgroundColor(0,0,0,0); // background color dark
viewer_two_clouds->addText("sample_cloud_1", 10, 10, "right", 0);
viewer_two_clouds->addPointCloud(cloud,  "sample_cloud_1", 0);

viewer_two_clouds->createViewPort (0.5,0.0,0.1,1.0,0);
viewer_two_clouds->setBackgroundColor(0.1,0.1,0.1,0); // background color light
viewer_two_clouds->addText("sample_cloud_2", 10, 10, "left", 0);
viewer_two_clouds->addPointCloud(cloud2,  "sample_cloud_2", 0);

Таким образом, вы можете видеть два облака точек друг на друге (и не перекрывать друг друга).

3
По вопросам рекламы [email protected]