@PCD转TXT文档
将PCD格式的点云转换为TXT文档 只保留XYZ坐标。并且之后将源点云尺度放大n倍,并转换。
#define _CRT_SECURE_NO_WARNINGS
#define _SCL_SECURE_NO_WARNINGS
#define _SILENCE_FPOS_SEEKPOS_DEPRECATION_WARNING
#define BOOST_TYPEOF_EMULATION
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_cloud.h>
#include <pcl/common/transforms.h>
using namespace std;
void PcdtoTxt(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, string path)
{
int Num = cloud->points.size();
double *X = new double[Num] {0};
double *Y = new double[Num] {0};
double *Z = new double[Num] {0};
for (size_t i = 0; i < cloud->points.size(); ++i)
{
X[i] = cloud->points[i].x;
Y[i] = cloud->points[i].y;
Z[i] = cloud->points[i].z;
}
ofstream zos(path);
zos << Num << endl;
for (int i = 0; i < Num; i++)
{
zos << X[i] << " " << Y[i] << " " << Z[i] << endl;
}
cout << "trans has done!!!" << endl;
}
int main()
{
pcl::PointCloud<pcl::PointXYZ>::Ptr source_cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile<pcl::PointXYZ>("C:\\Users\\yue\\Desktop\\test_pcd.pcd", *source_cloud);
cout << "Loaded" << source_cloud->points.size() << "cloud_target" << endl;
string cloud_source_txt = "C:\\Users\\yue\\Desktop\\test_pcd.txt";
PcdtoTxt(source_cloud, cloud_source_txt);
/*
以下是扩展 将source_cloud尺度变换n倍并转换输出
*/
Eigen::Affine3f transform = Eigen::Affine3f::Identity();
int n = 5;
transform.scale(n);
pcl::PointCloud<pcl::PointXYZ>::Ptr target_cloud(new pcl::PointCloud<pcl::PointXYZ>());
pcl::transformPointCloud(*source_cloud, *target_cloud, transform);
string cloud_target_txt = "C:\\Users\\yue\\Desktop\\变大_"+ std::to_string(n) +".txt";
PcdtoTxt(target_cloud, cloud_target_txt);
return 0;
}
pyl转pcd
链接:pyl转pcd