Я следовал точно руководству, которое я нашел here, с некоторыми изменениями для ввода. Тогда мой код:Ошибка восстановления поверхности - PCL 1.6
#include <common/common.h>
#include <io/pcd_io.h>
#include <features/normal_3d_omp.h>
#include <surface/mls.h>
#include <surface/poisson.h>
#include <pcl/io/vtk_io.h>
using namespace pcl;
int main (int argc, char **argv)
{
if (argc != 1)
{
PCL_ERROR ("Syntax: %s input.pcd output.ply\n", argv[0]);
return -1;
}
PointCloud::Ptr cloud (new PointCloud());
io::loadPCDFile ("ism_test_cat.pcd", *cloud);
MovingLeastSquares mls; mls.setInputCloud (cloud);
mls.setSearchRadius (0.01);
mls.setPolynomialFit (true);
mls.setPolynomialOrder (2);
mls.setUpsamplingMethod (MovingLeastSquares::SAMPLE_LOCAL_PLANE);
mls.setUpsamplingRadius (0.005);
mls.setUpsamplingStepSize (0.003);
PointCloud::Ptr cloud_smoothed (new PointCloud());
mls.process (*cloud_smoothed);
NormalEstimationOMP ne;
ne.setNumberOfThreads (8);
ne.setInputCloud (cloud_smoothed);
ne.setRadiusSearch (0.01);
Eigen::Vector4f centroid;
compute3DCentroid (*cloud_smoothed, centroid);
ne.setViewPoint (centroid[0], centroid[1], centroid[2]);
PointCloud::Ptr cloud_normals (new PointCloud());
ne.compute (*cloud_normals);
for (size_t i = 0; i < cloud_normals->size(); ++i)
{
cloud_normals->points[i].normal_x *= -1;
cloud_normals->points[i].normal_y *= -1; cloud_normals->points[i].normal_z *= -1;
}
PointCloud::Ptr cloud_smoothed_normals (new PointCloud());
concatenateFields (*cloud_smoothed, *cloud_normals, *cloud_smoothed_normals);
Poisson poisson;
poisson.setDepth (9);
poisson.setInputCloud (cloud_smoothed_normals);
PolygonMesh mesh;
poisson.reconstruct (mesh);
io::saveVTKFile ("sreconstruc.vtk",mesh);
return 0;
}
Я использую PCL 1.6, VS2010, все x64.
VS2010 не обнаруживает ошибок в коде и поэтому я скомпилировал его. Но когда я исполню, что у него есть проблема:
'Unhandled exception at 0x000007fee833546b (pcl_kdtree_debug.dll) in pcl_surface-reconstrucTutorial.exe: 0xC0000005: Access violation reading location 0x0000000000000000.'
Терминал показывает этот [pcl::NormalEstimationOMP::compute] input_ is empty!
.
Код выполнен до 'mls.process (* cloud_smoothed);' линия.
Как я могу его решить? Я схожу с ума, чтобы решить эту проблему.
Большое спасибо!
Файл я использовал в качестве входных данных является [это] (https://github.com/PointCloudLibrary/data/blob/ master/tutorials/ism_test_cat.pcd) – SPS
Вы используете значения по умолчанию, указанные в учебнике? а также тот же файл? Может случиться так, что если вы используете другой файл, вам нужно немного изменить значения, а затем получить результат. (ввод не будет пустым при нормальной оценке) – alap
Вы уверены, что действительно читаете файл point-cloud? Попробуйте использовать полный путь (не только «name.pcd»), потому что когда loadPCDFile пытается найти файл, но файл не существует на этом пути, вы не получите исключения, и программа продолжит выполнение. –