gpt4 book ai didi

c++ - 删除 PCL 可视化器内定义的 3D 框外的点

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:15 25 4
gpt4 key购买 nike

在给定的点云中,我想删除所有 x 小于 min 和大于 max 的点, yz 方向。下面是示例代码:

#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;
}

似乎只应用了最后一个过滤器。请问有什么解决办法吗?

最佳答案

使用 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);

要了解为什么此过滤器采用 Vector4f(而不是 Vector3f),请参阅下面的评论和 this question .

关于c++ - 删除 PCL 可视化器内定义的 3D 框外的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45790828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com