Я только начал использовать большую библиотеку облаков точек и хотел отобразить два облака точек в одном средстве просмотра, но каждый в своем цвете.
Когда я использую один объект облака точек (указатель ?!), он работает просто отлично, но если я хочу добавить второй, только второй будет отображаться в средстве просмотра.
Я использую версию 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();
Чтобы применить преобразования (например, вращения и переводы) к уже загруженному облаку точек, следует использовать pcl::transformPointCloud
функция (посмотреть здесь). Эта функция принимает 3 аргумента: входное облако, выходное облако и Eigen::Transform
, Просто определите преобразование перевода и введите его в функцию, чтобы правильно перевести ваше облако.
Есть хороший урок Eigen (Вот), который показывает вам, как определить и использовать преобразования пространства.
Декстер мне очень помог =)
вот что я использовал для преобразования 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);
}
Существуют и другие способы отображения двух облаков точек в одном средстве просмотра. Вы можете создать два разных окна просмотра, некоторые думают так:
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);
Таким образом, вы можете видеть два облака точек друг на друге (и не перекрывать друг друга).