PCL Цветовой фильтр - PullRequest
1 голос
/ 29 января 2020

Я хочу отфильтровать точки в облаке точек с определенным значением 'r'.

Я посмотрел документацию и заметил, что pcl / filters / color.h больше не доступен в PCL 1.7 и выше, что удивительно. (http://docs.pointclouds.org/1.3.1/classpcl_1_1_color_filter.html).

Я, вероятно, могу сделать это с наивом для l oop, но мне было интересно, есть ли способ использовать условия сквозного фильтра, как это вероятно многопоточный.

1 Ответ

1 голос
/ 30 января 2020

Я закончил с помощью conditional_removal, есть специализация шаблона для RGB. Вот фрагмент, где мы получаем облако точек ROS с именем cloud_msg.

 #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)
...