删除PCL可视化器内部已定义的3D框外的点 [英] Remove points outside defined 3D box inside PCL visualizer
本文介绍了删除PCL可视化器内部已定义的3D框外的点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在给定的点云中,我想删除所有x
,y
和z
方向上小于min
且大于max
的所有点.下面是示例代码:
In a given point cloud, I want to remove all the points which are less than min
and greater than max
for all x
, y
and z
direction. Below is the sample code:
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/filters/passthrough.h>
#include <pcl/visualization/pcl_visualizer.h>
// Define min and max for X, Y and Z
float minX = -0.1, minY = -0.5, minZ = -2.5;
float maxX = +0.1, maxY = +0.5, maxZ = +2.5;
int main (int argc, char** argv)
{
pcl::visualization::PCLVisualizer viewer("Cloud Viewer");
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr body (new pcl::PointCloud<pcl::PointXYZRGBA>);
pcl::io::loadPCDFile ("body.pcd", *body);
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr bodyFiltered (new pcl::PointCloud<pcl::PointXYZRGBA>);
pcl::PassThrough<pcl::PointXYZRGBA> filter;
filter.setInputCloud (body);
filter.setFilterFieldName ("x");
filter.setFilterLimits (minX, maxX);
filter.setFilterFieldName ("y");
filter.setFilterLimits (minY, maxY);
filter.setFilterFieldName ("z");
filter.setFilterLimits (minZ, maxZ);
filter.filter (*bodyFiltered);
viewer.addPointCloud (bodyFiltered,"body");
viewer.spin();
return 0;
}
似乎只应用了最后一个过滤器.有什么解决办法吗?
It seems that only last filter is being applied. Any solution, please?
推荐答案
使用pcl::CropBox
怎么办? (文档)
pcl::CropBox<pcl::PointXYZRGBA> boxFilter;
boxFilter.setMin(Eigen::Vector4f(minX, minY, minZ, 1.0));
boxFilter.setMax(Eigen::Vector4f(maxX, maxY, maxZ, 1.0));
boxFilter.setInputCloud(body);
boxFilter.filter(*bodyFiltered);
这篇关于删除PCL可视化器内部已定义的3D框外的点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文