当前位置:网站首页>未知点云结构文件转换需求
未知点云结构文件转换需求
2022-08-04 21:25:00 【moneymyone】
未知点云结构文件转换需求
需求描述
有一批点云,二进制的,字段非常规类型。
但是可以看出来总共有6个字段,其中两个字段是
_,没有具体规定是什么字段。现在要把这两个不知名的字段去掉,保留剩余4个字段
x y z intensity。

格式转换
还是同理,通过自定义点类型实现点云文件转换。
定义点类型的时候,短横类型设置为int 或者 string对于结果没有影响。
struct MyPointType //定义点类型结构
{
PCL_ADD_POINT4D; //该点类型有4个元素
/*尝试新增一个自定义*/
unsigned m; //定义自己新增的类型名称
//测试了添加这么多个也没问题
float intensity;
unsigned k;
EIGEN_MAKE_ALIGNED_OPERATOR_NEW //确保new操作符对齐操作
}EIGEN_ALIGN16; //强制SSE 对齐
POINT_CLOUD_REGISTER_POINT_STRUCT(MyPointType, //注册点类型宏
(float ,x,x)
(float ,y,y)
(float ,z,z)
(unsigned char ,m,m)
(float ,intensity,intensity)
(unsigned ,k,k)
)
主代码如下,可实现对文件夹下所有点云文件的批量转换:
/*
* @Description:
* @version: 1.0.0
* @Author: qianchengjun
* @Date: 2022-02-22 14:33:45
* @LastEditors: qianchengjun
* @LastEditTime: 2022-02-22 16:49:34
*/
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <fstream>
#include <stdio.h>
#include <sys/stat.h>
#include <dirent.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
using namespace std;
void ConvertPCD(std::string file)
{
pcl::PointCloud<MyPointType> cloudsrc;
pcl::PointCloud<pcl::PointXYZI> cloudtar;
if (pcl::io::loadPCDFile<MyPointType>(file, cloudsrc) == -1)
{
PCL_ERROR("Couldn'n read file! \n");
return;
}
std::cout << cloudsrc.points.size() << std::endl;
for (size_t i = 0; i < cloudsrc.points.size(); i++)
{
pcl::PointXYZI pt;
pt.x = cloudsrc[i].x;
pt.y = cloudsrc[i].y;
pt.z = cloudsrc[i].z;
pt.intensity = cloudsrc[i].intensity;
cloudtar.push_back(pt);
}
std::string newfile = file.replace(file.rfind(".pcd"),4,"_new.pcd");
pcl::PCDWriter writer;
writer.write<pcl::PointXYZI> (newfile, cloudtar, true); // 保存文件
}
int main(int argc, char** argv)
{
//目标文件夹路径
std::string folder = "/home/qiancj/Documents/M1/Underground_Garage/4.5mleft_head/";
vector<string> files;
getFiles(folder.c_str(), files);
for_each(files.begin(), files.end(), [](const string &file){
ConvertPCD(file);
cout << "finish convert file: " << file << endl; });
return 0;
}
结果如下:
所有新转换的文件名称都变为了“XXXXX_new.pcd”

边栏推荐
- PRIMAL: Pathfinding via Reinforcement and Imitation Multi-Agent Learning Code Analysis
- 立即升级!WPS Office 出现 0day 高危安全漏洞:可完全接管系统,官方推出紧急更新
- web漏洞扫描器-awvs
- Spss-系统聚类手算实操
- 数电快速入门(五)(编码器的介绍以及通用编码器74LS148和74LS147的介绍)
- LeetCode: 406. 根据身高重建队列
- LayaBox---TypeScript---举例
- 路由中的meta、params传参的一些问题(可传不可传,为空,搭配,点击传递多次参数报错)
- 如何最简单、通俗地理解爬虫的Scrapy框架?
- dotnet 通过 WMI 获取系统安装软件
猜你喜欢

Red team kill-free development practice of simulated confrontation

web漏洞扫描器-awvs

大势所趋之下的nft拍卖,未来艺术品的新赋能

开发deepstram的自定义插件,使用gst-dseaxmple插件进行扩充,实现deepstream图像输出前的预处理,实现图像自定义绘制图(精四)

2、字符集-编码-解码

SAP ABAP OData 服务如何支持 $select 有选择性地仅读取部分模型字段值试读版
![[2022 Hangzhou Electric Multi-School 5 1003 Slipper] Multiple Super Source Points + Shortest Path](/img/78/054329dec6a6faea5e9d583b6a8da5.png)
[2022 Hangzhou Electric Multi-School 5 1003 Slipper] Multiple Super Source Points + Shortest Path

How to understand the crawler's Scrapy framework in the simplest and most popular way?

【ubuntu20.04安装MySQL以及MySQL-workbench可视化工具】

mdk5.14 cannot be burned
随机推荐
2022年江苏省大学生电子设计竞赛(TI杯)B题 飞机 省级一等奖记录 “一个摆烂人的独白”
Named routes, the role of name in components
Data warehouse (1) What is data warehouse and what are the characteristics of data warehouse
【2022杭电多校5 1003 Slipper】多个超级源点+最短路
PowerCLi 导入License到vCenter 7
Cryptography Series: PEM and PKCS7, PKCS8, PKCS12
Android 面试——如何写一个又好又快的日志库?
【PCBA方案设计】握力计方案
命名路由、组件中name的作用
PowerCLi 批量配置NTP
mdk5.14无法烧录
数电快速入门(四)(组合逻辑电路的分析以及设计的介绍)
拼多多开放平台订单信息查询接口【pdd.order.basic.list.get订单基础信息列表查询接口(根据成交时间)】代码对接教程
27.降维
88. (the home of cesium) cesium polymerization figure
如何最简单、通俗地理解爬虫的Scrapy框架?
PowerCLi import license to vCenter 7
链栈的应用
大势所趋之下的nft拍卖,未来艺术品的新赋能
动手学深度学习_NiN