Как исправить pcl :: addPointCloudNormals? nullptr встречается в vtkProp3D :: SetUserMatrix - PullRequest
0 голосов
/ 14 мая 2019

Я использую PCL 1.9.1 в Windows (все в одном) и настраиваю VTK8.1.1 отдельно с помощью cmake. Все работает нормально, но добавление нормалей с pcl::addPointCloudNormals приводит к ошибке nullptr в vtkProp3D.cxx. Именно в

vtkProp3D::SetUserMatrix(vtkMatrix4x4 *matrix)
{
  this->IsIdentity = 0;  // <------ here

Я скопировал основные строки кода, как в http://pointclouds.org/documentation/tutorials/pcl_visualizer.php. Также я убедился, что оба входа (облака, нормали) не пусты.

Я пытался использовать addPointCloudNormals только с одним входом, где я использовал pcl::concatenateFields для объединения точек и нормалей в типе pcl::PointCloud<pcl::PointNormal>, что приводит к той же ошибке. То же самое при использовании VTK 8.1.0.

Мне также интересно, почему в установочных файлах pcl all-in-one нет файла vtkProp3D.cxx, только соответствующий заголовочный файл.

Может ли быть, что я должен использовать другую версию VTK? Или собрать с конкретными параметрами в cmake?

Вот код:

Вычислить нормали:

pcl::NormalEstimationOMP<pcl::PointXYZ, pcl::Normal> ne;
    ne.setNumberOfThreads(5);
    ne.setInputCloud(this->PointCloud_XYZ_PTR);

pcl::search::KdTree<pcl::PointXYZ>::Ptr ns_tree(new pcl::search::KdTree<pcl::PointXYZ>);
    ne.setSearchMethod(ns_tree);
    ne.setKSearch(5);
    ne.compute(PointCloud_Normals_XYZ);
PointCloud_Normals_XYZ_PTR = PointCloud_Normals_XYZ.makeShared();

функция вызова для визуализации облака точек и нормалей:

this->visualize_normals(PointCloud_XYZ_PTR, PointCloud_Normals_XYZ_PTR);

Функция визуализации облака точек и нормалей:

void visualize_normals(const pcl::PointCloud<pcl::PointXYZ>::Ptr points, const pcl::PointCloud<pcl::Normal>::Ptr normals)
{
    this->pcl_visualizer_PTR->addPointCloudNormals<pcl::PointXYZ, pcl::Normal>(points, normals, 50, 0.1, "normals");
    this->pcl_visualizer_PTR->updateCamera();
}
...