PCL读取带rgb信息的asc文件

  • 基本描述
  • 代码与使用

基本描述

本代码适用于x y z r g b格式的asc文件,如果读者的asc文件是其他的格式,请修改相应的代码。其实整个代码的核心是将r g b信息进行合成,将其变为一个float类型的数。一个单通道信息是一个0-255的数,也就是8bit.PCL库下的rgb信息用一个float类型的数来表示。这个浮点数的机器码其实由四部分组成:

因此可以使用移位完成上述操作。

int rgb = (r << 16 | g << 8 | b);
tmp.rgb = *reinterpret_cast<float*>(&rgb);

代码与使用

我将其封装成了模板类,使用时需要像使用PCL库一样添加类型声明,如:

auto a= read_asc_rgb<pcl::PointXYZRGB>(path);
auto cloud= a.read();

下面是具体的类定义,读者可以将其添加到.h文件中,方便include

#include <iostream>
#include <pcl/point_cloud.h> // for PointCloud
#include <pcl/point_types.h>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <string>
template <class PoinT>
class read_asc_rgb {private:std::string file_name;using PointCloudPtr = typename pcl::PointCloud<PoinT>::Ptr;PointCloudPtr cloud;
public:read_asc_rgb(const std::string file_path) {file_name = file_path;cloud = PointCloudPtr(new pcl::PointCloud<PoinT>);}PointCloudPtr read() {std::stringstream ss;std::vector<Point> v;std::ifstream ifs(file_name);std::string buffer;if (!ifs) {std::cout << "Open file fail" << std::endl;exit(1);}while (std::getline(ifs, buffer)) {Point tmp;ss << buffer;unsigned r, g, b;int rgb;ss >> tmp.x >> tmp.y >> tmp.z >> r >> g >> b;rgb = (r << 16 | g << 8 | b);tmp.rgb = *reinterpret_cast<float*>(&rgb);//std::cout << tmp.rgb << std::endl;v.push_back(tmp);}cloud->height = 1;cloud->width = v.size();cloud->resize(cloud->width, cloud->height);std::cout << cloud->width << std::endl;for (auto i = 0; i < v.size(); i++) {cloud->points[i].x = v[i].x;cloud->points[i].y = v[i].y;cloud->points[i].z = v[i].z;cloud->points[i].rgb = v[i].rgb;}return cloud;}
};

PCL读取带rgb信息的asc文件C++相关推荐

  1. c++怎么可以在二进制文件中读取带string的数据_文件处理 | csv文件读写

    欢迎关注公众号 学习资料不会少 文件处理 在我们做自动化测试的过程中,常常会将数据文件存放在csv或者Excel文件里边.这一章节内容将给大家介绍,如何使用python进行csv和Excel文件的处理 ...

  2. go语言 使用MTP协议 通过WPD(windows portable device)读取便携式设备信息并进行文件传输

    最下方有demo及源码. 背景 当手机通过 USB 连接 PC (选择文件传输,也就是MTP方式) 时,会看到设备管理器中出现便携设备这一栏,如下图: 打开我的电脑可以看到设备和驱动器中出现对应的设备 ...

  3. C++读取带逗号分隔符的数据文件

    txt文件内容: #include <fstream> #include <iostream> #include <sstream> #include <st ...

  4. Python对Excel的常规操作 之 读取带密码的文件,解除Sheet密码

    Python对Excel的常规操作 之 读取带密码的文件,解除Sheet密码 一些废话 读取加密的Excel 解除文件中Sheet的密码 写在后面 一些废话 最近一直在给部门写一个参数校验的小程序.因 ...

  5. java读取 info.plist源码_Java 解析 IPA 文件,读取 Info.plist 信息-Go语言中文社区

    在做移动MDM功能的时候,就遇到了这样一个问题,当用户上传IPA文件时,我如何知道这个IPA文件的相关信息呢?IPA文件有一个很重要的文件Info.plist 就类似于Android程序的Manife ...

  6. 【PCL】.asc文件转换为.pcd文件

    PCL(Point clouds library)处理的点云文件默认的是pcd格式,3D数据文件格式很多,这里仅仅提供.asc转.pcd的 程序原理也很简单,就是暴力的在每个.asc文件前添加几行.p ...

  7. C# 读取和输出asc文件

    C# 读取asc文件 读取asc文件 读取文件头和数据: /// <summary>/// 读取asc文件/// </summary>/// <param name=&q ...

  8. PCL读取ply文件

    PCL读取ply文件 PCL读取ply文件 PCL读取ply文件 以下是利用PCL库读取ply文件代码 int readcloud(pcl::PointCloud<pcl::PointXYZ&g ...

  9. osgEarth的Rex引擎原理分析(七十三)从高程文件读取的高程信息如何填充rex的高程瓦片

    目标:(七十二)中的问题147 高程文件的划分规则和rex瓦片是不一样的,高程文件的0级就是文件本身,不管文件实际范围多大,然后采用二分法逐级增加.rex瓦片的0级对应整个地球表面. 两个范围一般不是 ...

最新文章

  1. 分布式/微服务必配APM系统,SkyWalking让你不迷路
  2. 二叉树的遍历实验报告C语言,二叉树的建立与遍历实验报告(c语言编写,附源代码)...
  3. Sophos 紧急修复已遭利用的防火墙 0day
  4. 单层感知机实现或运算
  5. java代码怎么动态修改xml配置文件内容_[MyBatis]-MyBatis框架-05-动态sql
  6. 两组基下有相同坐标的向量_特征向量与线性变换
  7. 论开心网和人人网的衰落
  8. 软件工程uml画图期末考试(新闻发布系统)
  9. 记录点滴,善于分享-Microsoft Visio 2016下载与安装教程(全)
  10. 架构真经 | 缓存为王
  11. 英雄联盟大乱斗一个队出现两个杰斯-多线程死锁
  12. 海康萤石云硬盘录像机SDK使用
  13. 使用百度地图接口绘制地图
  14. latex 中对同一脚注进行引用
  15. 15款Chrome浏览器插件让设计师告别拖延症
  16. Cocos2dx - 缓动Action
  17. 云计算大数据中心(清明作业)
  18. 运行中的程序突然出现Killed原因
  19. 浅谈经济的真相,你无法逃避的问题(简论房地产是谁的噩梦)
  20. 网络串流_串流免费音乐的最佳网站

热门文章

  1. 广度优先搜索算法的典型应用——消灭小星星游戏的核心代码实现与解析
  2. 国际象棋棋盘 java_java打印国际象棋棋盘的方法
  3. 如何将Ai文件转换成PDF文件
  4. 快速提取PDF文件中的表格
  5. 阿里云服务器怎么更换ip?
  6. python语言进行生日悖论分析--随机试验方法
  7. 小学课外拓展计算机活动计划,小学科学课外活动计划及总结
  8. 域名解析暂时失败(二)
  9. python 输入名字输出hello名字_Python 输入输出
  10. craftsmanship中文_craftsmanship