Я извлек сегменты из облака точек и и использовал pcl::SACSegmentation<pcl::PointXYZ> seg;
чтобы соответствовать всем линиям одновременно. Все мои сегменты файлов хранятся в одной папке, и я могу читать их один за другим и рассчитывать их модельные коэффициенты индивидуально.
Лучший способ обойти эту проблему — через for
петля, но viewer.addLine
дает ошибки на второй итерации, говоря, что addLine
уже использовался после рисования одной линии (RANSAC). Я использовал метод с сайта PCL http://pointclouds.org/documentation/tutorials/cylinder_segmentation.php определить коэффициенты всех моих сегментов. Согласно тому, что я узнал до сих пор, коэффициенты модели хранятся внутри.
Цель: нарисуйте все линии из коэффициентов модели одновременно, используя RANSAC, и добавьте их в визуализатор PCL.
Это фрагмент, который я использовал для загрузки всех файлов (пример)
std::stringstream ss;
ss << "./cloud_cluster_" << j << ".pcd";
reader.read<pcl::PointXYZ> (ss.str (), *cloud_cluster, false);
j++;
// snip
pcl::visualizer viewer ("Sample programme")
viewer.addCloud();
viewer.addLine(model_coefficients)
Ваша помощь будет оценена.
addLine
Функция, которую вы используете, документирована в API здесь:
http://docs.pointclouds.org/trunk/classpcl_1_1visualization_1_1_p_c_l_visualizer.html#a5fd2b99b85da61df8b58980bdb6b0f41
Подпись:
bool addLine (const pcl::ModelCoefficients &coefficients, const std::string &id="line", int viewport=0)
Здесь вы можете увидеть, что когда вы добавляете строку, ей автоматически присваивается идентификатор строки «line
Msgstr «Это хорошо, если вы добавляете только одну строку, но для нескольких строк вам нужно дать уникальный идентификатор для каждой строки.
например
std::stringstream ss;
ss<<"line"<<j;
viewer.addLine(model_coefficients,ss.str());