pcd转las数据代码
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <liblas/liblas.hpp>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/pcl_visualizer.h>
int main()
{
std::ofstream ofs("C:\\Users\\10704\\Desktop\\dezhou\\原始数据(去除电塔铁轨)\\dezhou1_1-4_icp.las", ios::out | ios::binary);
if (!ofs.is_open())
{
std::cout << "err to open file las....." << std::endl;
}
liblas::Header header;
header.SetVersionMajor(1);
header.SetVersionMinor(2);
header.SetDataFormatId(liblas::ePointFormat3);
header.SetScale(0.01, 0.01, 0.01);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile("C:\\Users\\10704\\Desktop\\dezhou\\原始数据(去除电塔铁轨)\\dezhou1_1-4_icp.pcd", *cloud);
std::cout << "总数:" << cloud->points.size() << std::endl;
double minPt[3] = { cloud->points[0].x, cloud->points[0].y, cloud->points[0].z };
double maxPt[3] = { cloud->points[0].x, cloud->points[0].y, cloud->points[0].z };
liblas::Writer writer(ofs, header);
liblas::Point point(&header);
for (size_t i = 0; i < cloud->points.size(); i++)
{
double x = cloud->points[i].x;
double y = cloud->points[i].y;
double z = cloud->points[i].z;
if (x < minPt[0]) minPt[0] = x;
if (y < minPt[1]) minPt[1] = y;
if (z < minPt[2]) minPt[2] = z;
if (x > maxPt[0]) maxPt[0] = x;
if (y > maxPt[1]) maxPt[1] = y;
if (z > maxPt[2]) maxPt[2] = z;
point.SetCoordinates(x, y, z);
writer.WritePoint(point);
}
header.SetPointRecordsCount(static_cast<boost::uint32_t>(cloud->points.size()));
header.SetPointRecordsByReturnCount(0, static_cast<boost::uint32_t>(cloud->points.size()));
header.SetMin(minPt[0], minPt[1], minPt[2]);
header.SetMax(maxPt[0], maxPt[1], maxPt[2]);
writer.SetHeader(header);
system("pause");
return 0;
}
las转pcd代码
#define _CRT_SECURE_NO_WARNINGS
#define NOMINMAX
#include <iostream>
#include "lasreader.hpp"
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
int main() {
std::string file_path("C:\\Users\\10704\\Desktop\\dezhou\\原始数据(去除电塔铁轨)\\dezhou1_2-4.las");
LASreadOpener lasreadopener;
lasreadopener.set_file_name(file_path.c_str());
LASreader* lasreader = lasreadopener.open();
if (lasreader == nullptr)
{
std::cout << "Yes" << std::endl;
system("pause");
return 0;
}
size_t point_count = lasreader->header.number_of_point_records;
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
cloud->width = 1;
cloud->height = point_count;
cloud->resize(cloud->width * cloud->height);
int i = 0;
while (lasreader->read_point()) {
double tempx = lasreader->point.get_x();
double tempy = lasreader->point.get_y();
double tempz = lasreader->point.get_z();
(*cloud)[i].x = tempx;
(*cloud)[i].y = tempy;
(*cloud)[i].z = tempz;
i++;
}
pcl::io::savePCDFileASCII("C:\\Users\\10704\\Desktop\\dezhou\\原始数据(去除电塔铁轨)\\dezhou1_2-4.pcd", *cloud);
lasreader->close();
delete lasreader;
system("pause");
return 0;
}