PCL 读取ASCII类型点云文件【*.txt、*.asc、*.neu、*.xyz、*.pts、*.csv】(IO_AsciiIo)

PCL专栏目录及须知-CSDN博客

注意:ASCII码型点云包含:*.txt、*.asc、*.neu、*.xyz、*.pts、*.csv几种文件后缀的类型。

1.ASCII码

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种字符编码标准,用于将字符映射为数字,以便计算机能够处理和传输这些字符。它是现代字符编码体系的基石,广泛应用于通讯协议、文档编写、编程语言等领域。点云数据中,多种文件格式使用该码编译。

博客推荐:全面解析ASCII码:ASCII码表、大小顺序与实际应用详解

2.使用场景

很多时候,工作里面的点云是*.txt、*.xyz、*.csv几种类型,需用读取ASCII码点云的方式读取。

3.注意事项

无。

4.关键函数

(1)设置文件字段(必须给ASCII读取器设置文件字段,否则容易出现读取错误)

    // 设置文件字段
    std::vector<pcl::PCLPointField> filedHeader = pcl::getFields<pcl::PointXYZ>();
    asciiReader->setInputFields(filedHeader);

(2)注意pcl::ASCIIReader包含读取文件头

asciiReader->readHeader("D:/code/csdn/data/rabbit.txt", cloud2_ascii_header, origin_header, orientation_header, file_version_header, data_type_header, data_idx_header);

和读取文件

asciiReader->read("D:/code/csdn/data/rabbit.txt", cloud2_ascii, origin, orientation, file_version);

两个方法。调用读取文件头的方法时,点云数据中没有具体的点信息。

5.代码

#include <iostream>
#include <pcl/io/ascii_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <boost/thread/thread.hpp>

int main()
{
    /****************读取ASCII文件********************/
    pcl::ASCIIReader* asciiReader = new pcl::ASCIIReader();     // ascii对象
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ascii(new pcl::PointCloud<pcl::PointXYZ>);

    // 设置文件字段
    std::vector<pcl::PCLPointField> filedHeader = pcl::getFields<pcl::PointXYZ>();
    asciiReader->setInputFields(filedHeader);
    
    // 读取文件头
    pcl::PCLPointCloud2 cloud2_ascii_header;           // 结果点云数据头信息
    Eigen::Vector4f origin_header;                     // 传感器采集原点(仅适用于>FILE_V7,如果不存在则为空)
    Eigen::Quaternionf orientation_header;             // 传感器采集方向(仅适用于>FILE-V7)
    int file_version_header;                           // 文件的file版本(file_V6或file_V7)
    int data_type_header;                              // 数据类型(二进制数据=1,ascii=0等)
    unsigned int data_idx_header;                      // 文件中点云数据的偏移量

    asciiReader->readHeader("D:/code/csdn/data/rabbit.txt", cloud2_ascii_header, origin_header, orientation_header, file_version_header, data_type_header, data_idx_header);

    // 读取文件
    pcl::PCLPointCloud2 cloud2_ascii;           // 结果点云数据
    Eigen::Vector4f origin;                     // 传感器采集原点(仅适用于>FILE_V7,如果不存在则为空)
    Eigen::Quaternionf orientation;             // 传感器采集方向(仅适用于>FILE-V7)
    int file_version;                           // 文件的file版本(file_V6或file_V7)

    asciiReader->read("D:/code/csdn/data/rabbit.txt", cloud2_ascii, origin, orientation, file_version);
    pcl::fromPCLPointCloud2<pcl::PointXYZ>(cloud2_ascii, *cloud_ascii);         // 转换为pcl::point<pointT>形式

    // 打印
    std::cout << "传感器采集原点(仅适用于>FILE_V7,如果不存在则为空):" << origin_header << std::endl;
    std::cout << "传感器采集方向(仅适用于>FILE-V7):" << orientation_header << std::endl;
    std::cout << "文件的file版本(file_V6或file_V7):" << file_version_header << std::endl;
    std::cout << "数据类型(二进制数据=1,ascii=0等):" << data_type_header << std::endl;
    std::cout << "文件中点云数据的偏移量:" << data_idx_header << std::endl;

    // 展示
    boost::shared_ptr<pcl::visualization::PCLVisualizer> view_raw(new pcl::visualization::PCLVisualizer("raw"));
    view_raw->addPointCloud(cloud_ascii, "raw cloud");
    view_raw->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "raw cloud");

    while (!view_raw->wasStopped())
    {
        view_raw->spinOnce(100);
        boost::this_thread::sleep(boost::posix_time::microseconds(100000));
    }
}

6.结果展示

打印信息:

可视化结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值