admin管理员组文章数量:1567570
下面的代码来自点云库官方教程 :http://pointclouds/documentation/tutorials/
PassThrough 直通滤波是最简单的滤波方法,就是在指定的方向上x,y,z,按照给定的区间,保留该维度上在该区间上的点或者是保留该维度上在该区间之外的点。
#include <iostream>
#include <pcl/point_types.h>
#include <pcl/filters/passthrough.h>
#include <pcl/filters/statistical_outlier_removal.h>
int main(int argc, char** argv)
{
//点云的类型由 类pcl::PointCloud 的模板参数来定义
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // cloud是对象指针
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);
// Fill in the cloud data
cloud->width = 5; // ->左边必须是指针变量; .左边必须是实体变量
cloud->height = 1; //height = 1 表明生成的点云是 含有5个点的无序点云。
cloud->points.resize(cloud->width * cloud->height);
//c++中 & 是取地址运算,*可以是乘法运算符;
//定义指针变量,如int *p;访问指针指向的变量的值,如cout<<*p<<endl;
for (auto& point : *cloud)
{
point.x = 1024* rand() / (RAND_MAX + 1.0f); //rand()产生的随机数大小范围是 0 - RANDMAX, RANDMAX最小是32767(int)
point.y = 1024 * rand() / (RAND_MAX + 1.0f); // x,y,z的取值范围是 0-2 的随机小数
point.z = 1024* rand() / (RAND_MAX + 1.0f);
}
std::cerr << "Cloud before filtering: " << std::endl; //cerr, cout, clog这3个都是ostream类型的对象,cin是istream类型的对象
for (const auto& point : *cloud)
std::cerr << " " << point.x << " "
<< point.y << " "
<< point.z << std::endl;
// Create the PassThrough filter object:pass
pcl::PassThrough<pcl::PointXYZ> pass;
pass.setInputCloud(cloud);
pass.setFilterFieldName("z"); // perform a simple filter along the z axis
pass.setFilterLimits(0.0f, 200.0f);
//pass.setFilterLimitsNegative (true);
pass.filter(*cloud_filtered);
std::cerr << "Cloud after filtering: " << std::endl;
for (const auto& point : *cloud_filtered)
std::cerr << " " << point.x << " "
<< point.y << " "
<< point.z << std::endl;
return (0);
}
上面这段代码没有涉及到从磁盘中读取ply文件,而是直接随机生成一个点云,并输出;然后创建一个PassThrough filter对象,并对它进行设置,然后将滤波后得到的点云保存至*cloud_filtered中,并输出。
现在遇到的问题是:运行结果中只输出了滤波前的点云坐标。
vs的输出控制台显示:出现了Microsoft C++ 异常: std::length_error
在PCL环境配置这篇文章中有提到跟上面一样的问题。
出错原因:我在Debug,release模式下对链接器–>输入–>附加依赖项 设置的内容是一样的,所以导致上面错误的发生。
解决
然后,参考PCL环境配置:VS2017,PCL1.8.1,win10这篇教程,首先将release x64下面的属性配置页给移除,然后重新对Debug x64中的链接器–>输入–>附加依赖项 进行设置。【成功】
运行结果:
本文标签: 入门PCLpassthrough
版权声明:本文标题:【PCL入门】点云滤波—之PassThrough 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1725804962a1043907.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论