c++ - Remove points outside defined 3D box inside PCL visualizer -
in given point cloud, want remove points less min
, greater max
x
, y
, z
direction. below 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 , max x, y , 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 last filter being applied. solution, please?
what using pcl::cropbox
? (documentation)
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);
Comments
Post a Comment