当前位置:网站首页>未知点云结构文件转换需求
未知点云结构文件转换需求
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”

边栏推荐
- ue unreal 虚幻 高分辨率无缩放 编辑器字太小 调整编辑器整体缩放
- 机器学习_02
- mysql基础
- OD-Model [6]: YOLOv2
- Re24:读论文 IOT-Match Explainable Legal Case Matching via Inverse Optimal Transport-based Rationale Ext
- 【PCBA方案设计】握力计方案
- adb shell input keyevent 模拟按键事件
- 数电快速入门(四)(组合逻辑电路的分析以及设计的介绍)
- C language knowledge (1) - overview of C language, data types
- NFT宝典:你需要知道NFT的术语和定义
猜你喜欢

【uiautomation】微信好友列表获取(存储到txt中)

DSPE-PEG-Aldehyde,DSPE-PEG-CHO,磷脂-聚乙二醇-醛基一种疏水18碳磷脂

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

数电快速入门(一)(BCD码和三种基本逻辑运算的介绍)

Red team kill-free development practice of simulated confrontation

如何一键重装win7系统?重装win7系统详细教程

PowerCLi batch configuration of NTP

8 年产品经验,我总结了这些持续高效研发实践经验 · 协同篇

【手把手教你使用STM32HAL库的串口空闲中断】

DSPE-PEG-Aldehyde, DSPE-PEG-CHO, Phospholipid-Polyethylene Glycol-Aldehyde A hydrophobic 18-carbon phospholipid
随机推荐
Axure9基本交互操作(一)
moke、动态图片资源打包显示
【编程思想】
dotnet 删除只读文件
Pinduoduo open platform order information query interface [pdd.order.basic.list.get order basic information list query interface (according to transaction time)] code docking tutorial
动手学深度学习_NiN
大势所趋之下的nft拍卖,未来艺术品的新赋能
【ubuntu20.04安装MySQL以及MySQL-workbench可视化工具】
【2022牛客多校5 A题 Don‘t Starve】DP
PCBA scheme design - kitchen voice scale chip scheme
UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xd6 in position 120: invalid continuation byte
Win11如何设置软件快捷方式?
Data warehouse (1) What is data warehouse and what are the characteristics of data warehouse
web漏洞扫描器-awvs
Chapter7 : Network-Driven Drug Discovery
Cryptography Series: PEM and PKCS7, PKCS8, PKCS12
伺服电机矢量控制原理与仿真(1)控制系统的建立
STM32MP157A驱动开发 | 01- 板载LED作为系统心跳指示灯
PCBA方案设计——厨房语音秤芯片方案
[21 days learning challenge - kernel notes] (2), based in the device tree