基于pcl库可视化vectorpclPointIndices all_cluster_indices表示的点云数据
要基于PCL库可视化vector<pcl::PointIndices>表示的点云数据,需要进行以下步骤:
- 创建一个PCL可视化对象,用于显示点云数据。
pcl::visualization::PCLVisualizer viewer("Point Cloud Viewer");
- 设置点云的颜色和尺寸。
viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "cloud");
viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 1.0, 0.0, 0.0, "cloud");
- 遍历
vector<pcl::PointIndices>,获取每个点云簇的索引,并将其可视化。
for (int i = 0; i < all_cluster_indices.size(); i++) {
pcl::PointIndices cluster_indices = all_cluster_indices[i];
pcl::PointCloud<pcl::PointXYZ>::Ptr cluster_cloud(new pcl::PointCloud<pcl::PointXYZ>);
for (int j = 0; j < cluster_indices.indices.size(); j++) {
int index = cluster_indices.indices[j];
pcl::PointXYZ point = cloud->points[index];
cluster_cloud->points.push_back(point);
}
// 为每个点云簇创建一个唯一的ID,并将其添加到可视化对象中进行显示
std::stringstream cluster_id;
cluster_id << "cluster_" << i;
viewer.addPointCloud(cluster_cloud, cluster_id.str());
}
- 设置点云的视角和交互方式。
viewer.setCameraPosition(0, 0, -2, 0, -1, 0, 0);
viewer.setBackgroundColor(0.0, 0.0, 0.0);
viewer.addCoordinateSystem(0.1);
viewer.initCameraParameters();
viewer.spin();
完整的示例代码如下所示:
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>
int main() {
// 加载点云数据
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile<pcl::PointXYZ>("input.pcd", *cloud);
// 定义点云簇的索引
std::vector<pcl::PointIndices> all_cluster_indices;
// 创建PCL可视化对象
pcl::visualization::PCLVisualizer viewer("Point Cloud Viewer");
// 设置点云的颜色和尺寸
viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "cloud");
viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 1.0, 0.0, 0.0, "cloud");
// 遍历点云簇的索引并可视化点云数据
for (int i = 0; i < all_cluster_indices.size(); i++) {
pcl::PointIndices cluster_indices = all_cluster_indices[i];
pcl::PointCloud<pcl::PointXYZ>::Ptr cluster_cloud(new pcl::PointCloud<pcl::PointXYZ>);
for (int j = 0; j < cluster_indices.indices.size(); j++) {
int index = cluster_indices.indices[j];
pcl::PointXYZ point = cloud->points[index];
cluster_cloud->points.push_back(point);
}
// 为每个点云簇创建一个唯一的ID,并将其添加到可视化对象中进行显示
std::stringstream cluster_id;
cluster_id << "cluster_" << i;
viewer.addPointCloud(cluster_cloud, cluster_id.str());
}
// 设置点云的视角和交互方式
viewer.setCameraPosition(0, 0, -2, 0, -1, 0, 0);
viewer.setBackgroundColor(0.0, 0.0, 0.0);
viewer.addCoordinateSystem(0.1);
viewer.initCameraParameters();
viewer.spin();
return 0;
}
请注意,上述代码中的input.pcd是待加载的点云数据文件,你需要将其替换为你自己的点云文件路径。另外,你还需要根据自己的需求调整点云的颜色、尺寸、视角等参数
原文地址: https://www.cveoy.top/t/topic/h7tP 著作权归作者所有。请勿转载和采集!