通过vector创建一个新的容器,存储两个不同的点云,可以通过数组的方式获取到vector中的点云数据
时间: 2024-03-01 18:55:12 浏览: 58
是的,您可以通过 `std::vector` 创建一个新的容器,存储两个不同的点云,并且可以通过数组的方式访问 `std::vector` 容器中的点云数据。以下是示例代码:
```cpp
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <vector>
int main(int argc, char** argv)
{
// 读取点云文件
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile<pcl::PointXYZ>("cloud.pcd", *cloud);
// 分割出点云中的两个部分
std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr> clouds;
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud1(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud2(new pcl::PointCloud<pcl::PointXYZ>);
for (int i = 0; i < cloud->size(); i++)
{
if ((*cloud)[i].x < 0.0)
cloud1->push_back((*cloud)[i]);
else
cloud2->push_back((*cloud)[i]);
}
clouds.push_back(cloud1);
clouds.push_back(cloud2);
// 输出分割后的点云的大小
for (int i = 0; i < clouds.size(); i++)
std::cout << "Cloud " << i+1 << " size: " << clouds[i]->size() << std::endl;
// 访问数组中的点云数据
std::cout << "First point of cloud 1: " << (*clouds[0])[0].x << ", " << (*clouds[0])[0].y << ", " << (*clouds[0])[0].z << std::endl;
std::cout << "First point of cloud 2: " << (*clouds[1])[0].x << ", " << (*clouds[1])[0].y << ", " << (*clouds[1])[0].z << std::endl;
return 0;
}
```
上述示例代码读取点云文件 `cloud.pcd`,将其分割为两个部分并存储在 `std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr>` 容器中。通过遍历容器中的元素,可以访问每个点云的数据。例如,`(*clouds[0])[0]` 表示数组中第一个点云的第一个点。
阅读全文