我想过滤出点云中具有特定'r'值的点。
我查看了文档,发现pcl / filters / color.h在PCL 1.7及更高版本中不再可用,这令人困惑。 (http://docs.pointclouds.org/1.3.1/classpcl_1_1_color_filter.html)。
我可能可以通过朴素的for循环来做到这一点,但是想知道是否存在一种使用传递过滤条件的方法,因为这可能是多线程的。
我最终使用了conditional_removal,RGB的模板专门化。这是一个片段,我们获得了一个称为cloud_msg的ROS点云。
#include <pcl/filters/conditional_removal.h> //and the other usuals
pcl::PointCloud<pcl::PointXYZRGB>::Ptr rgb_cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZRGB>);
pcl::fromROSMsg(*cloud_msg, *rgb_cloud);
pcl::PCLPointCloud2 cloud_filtered_ros;
pcl::ConditionalRemoval<pcl::PointXYZRGB> color_filter;
pcl::PackedRGBComparison<pcl::PointXYZRGB>::Ptr
red_condition(new pcl::PackedRGBComparison<pcl::PointXYZRGB>("r", pcl::ComparisonOps::GT, 90));
pcl::ConditionAnd<pcl::PointXYZRGB>::Ptr color_cond (new pcl::ConditionAnd<pcl::PointXYZRGB> ());
color_cond->addComparison (red_condition);
// Build the filter
color_filter.setInputCloud(rgb_cloud);
color_filter.setCondition (color_cond);
color_filter.filter(*cloud_filtered)