0、介绍
liblas库是一个开源库,提供了一系列对Lidar数据.las格式的读写等操作函数。
1、安装
git clone https://github.com/libLAS/libLAS.git
cd libLAS/
mkdir build && cd build
cmake ..
make
sudo make install
2、查看点云信息
# sudo apt install liblas-bin
lasinfo test.las
3、las格式转pcd格式
main.cc:
#include <iostream>
#include <fstream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <liblas/liblas.hpp>
int main() {
const char* lasfile = "/tmp/test.las";
const char* pcdfile = "/tmp/test.pcd";
std::ifstream ifs;
ifs.open(lasfile, std::ios::in | std::ios::binary);
liblas::ReaderFactory f;
liblas::Reader reader = f.CreateWithStream(ifs);
liblas::Header const& header = reader.GetHeader();
std::cout << "Compressed: " << (header.Compressed() == true? "True" : "False") << std::endl;
std::cout << "Signature: " << header.GetFileSignature() << std::endl;
pcl::PointCloud<pcl::PointXYZI>::Ptr pointCloudPtr(new pcl::PointCloud<pcl::PointXYZI>);
int count = header.GetPointRecordsCount();
pointCloudPtr->width = 1;
pointCloudPtr->height = count;
pointCloudPtr->is_dense = false;
pointCloudPtr->resize(pointCloudPtr->width * pointCloudPtr->height);
int i = 0;
while (reader.ReadNextPoint()) {
liblas::Point const& p = reader.GetPoint();
pointCloudPtr->points[i].x = p.GetX();
pointCloudPtr->points[i].y = p.GetY();
pointCloudPtr->points[i].z = p.GetZ();
pointCloudPtr->points[i].intensity = p.GetIntensity();
++i;
}
pcl::io::savePCDFileASCII(pcdfile, *pointCloudPtr);
return 0;
}
CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.3)
project(test)
set(CMAKE_CXX_STANDARD 11)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
find_package(PCL 1.2 REQUIRED)
find_package(libLAS REQUIRED)
message("include: "${libLAS_INCLUDE_DIRS})
message("libraries: "${libLAS_LIBRARIES})
include_directories(${PCL_INCLUDE_DIRS} ${libLAS_INCLUDE_DIRS})
add_executable(test main.cc)
target_link_libraries(test
${libLAS_LIBRARIES}
${PCL_LIBRARIES})
参考: