在进行点云滤波的代码调试的时候,显示vector subscript out of range错误,尝试了很多解决方法都没弄好,不知道是不是跟点云的有序和无序是否有关?
#include "stdafx.h"
#include <iostream>
#include <pcl/point_types.h>
#include <pcl/filters/conditional_removal.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/cloud_viewer.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ>);
// 填入点云数据
pcl::io::loadPCDFile ("cloud_tBF01_inliers.pcd", *cloud);
pcl::visualization::CloudViewer viewer1("Cloud before filtering");
viewer1.showCloud(cloud);
//添加比较算子
pcl::ConditionAnd<pcl::PointXYZ>::Ptr range_cond (new pcl::ConditionAnd<pcl::PointXYZ> ());
range_cond->addComparison (pcl::FieldComparison<pcl::PointXYZ>::ConstPtr (new pcl::FieldComparison<pcl::PointXYZ> ("z", pcl::ComparisonOps::GT, 0.0)));
range_cond->addComparison (pcl::FieldComparison<pcl::PointXYZ>::ConstPtr (new pcl::FieldComparison<pcl::PointXYZ> ("z", pcl::ComparisonOps::LT, 0.8)));
// 创建滤波器
pcl::ConditionalRemoval<pcl::PointXYZ> condrem (range_cond);
condrem.setInputCloud (cloud);
condrem.setKeepOrganized(true);
// 应用滤波器
condrem.filter (*cloud_filtered);
pcl::visualization::CloudViewer viewer2("Cloud after filtering");
viewer2.showCloud(cloud_filtered);
pcl::PCDWriter writer;
writer.write<pcl::PointXYZ>("cloud_tBF01_gh.pcd",*cloud_filtered,false);
system("pause");
return 0;
}
|