我完全按照我在这里找到的教程,对输入进行了一些修改。然后我的代码是:
#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);' 线。
我该如何解决?我要疯了才能解决它。
非常感谢提前!!