最近在处理一块样地的多站地基点云数据时,遇到了一个问题:每一站的点云数据量过大,超过1亿点,全部读进内存中会导致内存溢出,程序崩掉。
因此,在读取了第一站点云之后要及时释放PCL中的点云变量,接着再读第二站数据,依次处理。
在网上查询了很多释放变量的方式,如:
delete &input_cloud;
free(&input_cloud);
还有PCL自带的方法,如:
input_cloud.reset();
input_cloud->~PointCloud();
但是,都没有实际解决问题。
最后,尝试的方法如下:
// 分配内存空间
pcl::PointCloud<pcl::PointXYZRGB>::Ptr input_cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
pcl::PointCloud<pcl::PointXYZRGB>::Ptr output_cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
// 释放点云内存
input_cloud.reset(new pcl::PointCloud<pcl::PointXYZRGB>());
output_cloud.reset(new pcl::PointCloud<pcl::PointXYZRGB>());
成功解决问题