系列文章目录
前言
点云处理时往往会需要对多个点云进行处理,比如在预处理,保存点云时。下面提供一个简单的点云批量转换例子,PCD文件从Binary编码转ASCII编码,供大家参考。
一、PCL是什么?
点云库 (PCL) 是一个独立的、大规模的、开放的 2D/3D 图像和点云处理项目。PCL 是根据BSD 许可条款发布的,因此可免费用于商业和研究用途。
二、配置PCL环境
三、使用步骤
1.引入库
代码如下(示例):
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <boost/filesystem.hpp>
namespace fs = boost::filesystem;
2.主函数
代码如下(示例):
int main(int argc, char** argv)
{
// 定义输入和输出文件夹路径
fs::path input_folder("D:\\VS2019Projects\\Customers\\20240711_bin2ascii\\dataset\\");
fs::path output_folder("D:\\VS2019Projects\\Customers\\20240711_bin2ascii\\output\\");
// 如果输出文件夹不存在,则创建
if (!fs::exists(output_folder)) {
fs::create_directory(output_folder);
}
// 遍历输入文件夹中的所有PCD文件
for (auto& entry : fs::directory_iterator(input_folder))
{
if (fs::is_regular_file(entry) && entry.path().extension() == ".pcd")
{
// 读取点云文件
pcl::PointCloud<pcl::PointXYZI>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZI>);
if (pcl::io::loadPCDFile<pcl::PointXYZI>(entry.path().string(), *cloud) == -1)
{
std::cerr << "Failed to load PCD file " << entry.path().string() << std::endl;
continue;
}
// 生成输出文件名
fs::path output_file = output_folder / (entry.path().stem().string() + "_ASCII.pcd");
// 保存点云文件为ASCII格式
if (pcl::io::savePCDFileASCII(output_file.string(), *cloud) == -1)
{
std::cerr << "Failed to save PCD file " << output_file.string() << std::endl;
continue;
}
std::cout << "Converted " << entry.path().filename().string() << " to ASCII format." << std::endl;
}
}
return 0;
}
总结
基于PCL对点云文件的批量操作示例~