pcl - 在多边形的正常空间内的 pcl 点云中查找点
问题描述
如果我正确理解文档,则可以使用 pcl::ExtractPolygonalPrismData 在与定义的多边形垂直的空间内的云中找到点。
我不使用 pcl::isPointIn2DPolygon 因为我的多边形在 xz 平面上。所以我想沿着y轴测试。 绿色:点云;红色:多边形顶点
测试代码:
//create pointcloud on y=1 plane
std::vector<pcl::PointXYZ, Eigen::aligned_allocator<pcl::PointXYZ> > testpoints;
for(int i=0;i<5;i++){
float x=i+0.5;
for(int j=0;j<5;j++){
float z=j+0.5;
testpoints.push_back(pcl::PointXYZ(x,1.0,z));
}
}
pcl::PointCloud<pcl::PointXYZ>::Ptr pointCloud (new pcl::PointCloud<pcl::PointXYZ> ());
pointCloud->points=testpoints;
pointCloud->width=testpoints.size();
pointCloud->height=1;
//create polygon points on y=0 plane
std::vector<pcl::PointXYZ, Eigen::aligned_allocator<pcl::PointXYZ> > pcl_polygon;
pcl_polygon.push_back(pcl::PointXYZ(0 , 0 , 0));
pcl_polygon.push_back(pcl::PointXYZ(2 , 0 , 0));
pcl_polygon.push_back(pcl::PointXYZ(2 , 0 , 2));
pcl_polygon.push_back(pcl::PointXYZ(0 , 0 , 2));
pcl::PointCloud<pcl::PointXYZ>::Ptr hullCloud (new pcl::PointCloud<pcl::PointXYZ> ());
hullCloud->points=pcl_polygon;
hullCloud->width=4;
hullCloud->height=1;
pcl::ConvexHull<pcl::PointXYZ> pclHull;
pclHull.setInputCloud (hullCloud);
pcl::PointCloud<pcl::PointXYZ>::Ptr output_hull (new pcl::PointCloud<pcl::PointXYZ>);
pclHull.reconstruct (*output_hull);
if (pclHull.getDimension () != 2){
PCL_ERROR ("The input cloud does not represent a planar surface.\n");
return;
}
pcl::PointIndices::Ptr inPrism (new pcl::PointIndices);
pcl::ExtractPolygonalPrismData<pcl::PointXYZ> searchPrism;
searchPrism.setInputCloud (pointCloud);
searchPrism.setInputPlanarHull (output_hull);
searchPrism.setHeightLimits (0, 10);
searchPrism.segment (*inPrism);
qDebug() << inPrism->indices.size() + " this is empty";
不幸的是 inPrism->indices 是空的,但我希望左上角的点。(0.5,0.5)(1.5,0.5)(0.5,1.5)(1.5,1.5)
解决方案
我必须换行:
searchPrism.setHeightLimits (0, -10);
至
searchPrism.setHeightLimits (-10, 0);
有人可以解释一下吗?
推荐阅读
- post - Grails 3:通过 POST 绑定多个命令对象
- java - 如何使用云功能在应用程序中使用 Firestore 中的文档名称填充我的微调器?
- python - HTML中的Django If语句没有响应
- java - 我正在尝试制作一个程序,要求用户提供 file.txt 并使用字母的频率来绘制条形图。我是堆栈
- pytest - Python asynctest 模拟补丁装饰器溢出到后续测试中
- django - Docker + django_extensions + jupyter: OSError: [Errno 99] 无法分配请求的地址
- python - 如果缺少行,则获取第 n 行组并填充“无”
- redux - Antd - Form.List 预填充
- javascript - Bootstrap Vue - 有没有办法让消息框确认模式超时?
- sql - 如何使用触发器创建视图?