#include<pcl/point_types.h>
#include<pcl/io/pcd_io.h>
#include <open3d/Open3D.h>
#include <iostream>
using namespace open3d;
using namespace std;
std::shared_ptr<geometry::PointCloud> LoadPLY(const string &path) {
auto cloud_ptr = std::make_shared<geometry::PointCloud>();
open3d::io::ReadPointCloud(path, *cloud_ptr);
return cloud_ptr;
}
pcl::PointCloud<pcl::PointXYZ>::Ptr CvtO3DToPCL(std::shared_ptr<geometry::PointCloud> pc) {
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ptr(new pcl::PointCloud<pcl::PointXYZ>);
cloud_ptr->resize(pc->points_.size());
for (int i = 0; i < pc->points_.size(); i++) {
cloud_ptr->points[i].x = pc->points_[i].x();
cloud_ptr->points[i].y = pc->points_[i].y();
cloud_ptr->points[i].z = pc->points_[i].z();
}
return cloud_ptr;
}
std::shared_ptr<geometry::PointCloud> CvtPCLToO3D(pcl::PointCloud<pcl::PointXYZ>::Ptr pc) {
auto open3d_cloud_ptr = std::make_shared<geometry::PointCloud>();
open3d_cloud_ptr->points_.resize(pc->points.size());
for (int i = 0; i < pc->points.size(); i++) {
open3d_cloud_ptr->points_[i][0] = pc->points[i].x;
open3d_cloud_ptr->points_[i][1] = pc->points[i].y;
open3d_cloud_ptr->points_[i][2] = pc->points[i].z;
}
return open3d_cloud_ptr;
}
int main() {
auto o3d_ply = LoadPLY("/home/rvbust/Documents/test1.ply");
auto pcl_cloud_ptr = CvtO3DToPCL(o3d_ply);
auto o3d_cloud_ptr = CvtPCLToO3D(pcl_cloud_ptr);
visualization::DrawGeometries({o3d_cloud_ptr}, "PointCloud");
return 0;
}
pcl之open3d数据与pcl数据相互转换
最新推荐文章于 2024-11-20 17:29:05 发布