PCL点云学习(1)——pcd文件的生成和读取
MATLAB mat文件转TXT文件
因为本菜鸟之前一直使用MATLAB做点云处理,所以数据都是mat文件,为了使用PCL库,需要先转化为TXT文件,在使用C++PCL将TXT文件转化为PCD文件。。。。。下面是MATLAB代码,不需要的同学请自动忽略。
fid=fopen('pipline.txt','wt');
fprintf(fid,'%12.8f %12.8f %12.8f\n',pipline);%读取是按列进行读取
fclose(fid);
注意:第二行代码中的“pipline”就是待转化的mat文件,是一个3*n的矩阵,n表示点云的个数,一定要是3* n的形式,因为fprintf函数是按列读取。
C++ TXT转PCD文件
进入正题,直接上代码:
#include <iostream>
#include<fstream>
#include<vector>
#include<string>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
using namespace std;
int main(int argc, char** argv)
{//定义一种类型表示TXT中xyztypedef struct TXT_Point_XYZ{double x;double y;double z;}TOPOINT_XYZ;//读取txt文件int num_txt;FILE *fp_txt;TXT_Point_XYZ txt_points;vector<TXT_Point_XYZ> my_TxtPoints;fp_txt = fopen("pipline.txt", "r");if (fp_txt){while (fscanf(fp_txt, "%lf %lf %lf", &txt_points.x, &txt_points.y, &txt_points.z) != EOF){//将点存入容器尾部my_TxtPoints.push_back(txt_points);}}elsecout << "读取txt文件失败" << endl;num_txt = my_TxtPoints.size();//写入点云数据pcl::PointCloud<pcl::PointXYZ> ::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);cloud->width = num_txt;cloud->height = 1;cloud->is_dense = false;cloud->points.resize(cloud->width*cloud->height);for (int i = 0; i < cloud->points.size(); ++i){cloud->points[i].x = my_TxtPoints[i].x;cloud->points[i].y = my_TxtPoints[i].y;cloud->points[i].z = my_TxtPoints[i].z;}pcl::io::savePCDFileASCII("test_pcd.pcd", *cloud);cout << "从 txt_pcd.txt读取" << cloud->points.size() << "点写入txt_pcd.pcd" << endl;//打印出写入的点cout << "_________________________________" << endl;for (size_t i = 0; i < cloud->points.size(); ++i)cout << " " << cloud->points[i].x<< " " << cloud->points[i].y<< " " << cloud->points[i].z << endl;system("pause");return (0);
}
注释:
fscanf 位于头文件中, 其功能为根据数据格式(format)从输入流中读入数据;与fgets的差别在于:fscanf遇到空格和换行时结束,那么它的读取过程是怎样的呢?举个例子:
例如:int a,b,c;
数据文件fid中的数据是:
89 99 70<CR>
78 99 69<CR>
用fscanf(fid,"%d%d%d",&a,&b,&c);读取时,98赋给a,99赋给b,70赋给c,最后的<CR>会保留在文件中,当下一个scanf()函数再行读入时,首先碰到<CR>,这个<CR>会被读出并丢弃,即使有多个白字符也同样被丢弃,直到读到有效数据。
EOF 是 end of file , 通常用于 读文件时,读到文件尾。文件尾有此符号。
resize(cloud->width*cloud->height);表示调整容器cloud的大小。
from:https://blog.csdn.net/qq_42570058/article/details/82989794
PCL点云学习(1)——pcd文件的生成和读取相关推荐
- PCL点云CSV转PCD文件
点云文件转换代码 注意:CSV文件格式也不同,本文所述的CSV文件时用基恩士线激光传感器得到的. 具体格式为,这样式的 表格中行表示X轴向的点,列表示Y,而表格中的数值表示Z轴深度. X与Y的间距是由 ...
- ROS kinetic环境使用Realsense D435i获取三维点云并存为.pcd文件
ROS kinetic环境使用Realsense D435i获取三维点云并存为.pcd文件 二进制安装D435的SDK 下载intel Realsense ROS工作空间 ROS下驱动D435i获得点 ...
- PCL点云学习 十二(RoPs 特征与惯性矩描述子)
RoPs(Rotational Projection Statistics) pcl官网地址 来自: <pcl_点云从入门到精通>:详见这里 旋装投影特征 旋装平移不变性 抗干扰性良好 关 ...
- matlab如何新建mat文件_matlab中mat文件的生成和读取
1.mat文件的生成 (1)直接在Matlab中创建并保存矩阵数据 打开Matlab软件,点击左上角文件(File),然后点击新建(new),选择变量(Variable),就新建了一个mat文件. 点 ...
- matlab中mat文件的生成和读取
在命令窗口输入数据. 1.mat文件的生成 (1)保存单一矩阵数据 如图所示,输入数据,生成数组.最后输入save x1 x.该语句表示将敲入的数组x生成数据x1.mat文件. (2)如果矩阵A.B都 ...
- matlab.mat文件读取,matlab中mat文件的生成和读取
1.mat文件的生成 (1)直接在Matlab中创建并保存矩阵数据 打开Matlab软件,点击左上角文件(File),然后点击新建(new),选择变量(Variable),就新建了一个mat文件. 点 ...
- android中xml文件的生成与读取(Pull)
1.android中是采用Xml文件序列化器生成Xml文件的, //1得到一个xml文件的序列化器(生成器) XmlSerializer serializer=Xml.newSerializer(); ...
- XML文件的生成与读取
从数据库生成: public static void ToXML(string tablename){//获取数据string sql = "select * from " + t ...
- 从PCD文件写入和读取点云数据
(1)学习向PCD文件写入点云数据 建立工程文件ch2,然后新建write_pcd.cpp CMakeLists.txt两个文件 write_pcd.cpp : #include <iostr ...
最新文章
- 【力扣网练习题】两数之和
- bash脚本之for语句if语句以及各种测试语句(2)
- jemter编写Mysql脚本___传参
- 高级计算机网络知识点复习
- [HTTP]Etag的工作流程
- 71.数据模型有哪几种?特征?
- 搞笑向, 面向IE8的webworker-ployfill
- SAP Spartacus 启动时 Chrome 里观察到的 product.js
- 首汽约车上线行程录音功能 产生司乘纠纷时可用于调查取证
- linux jsp连接mysql_Linux JSP连接MySQL数据库
- QT每日一练day20:事件处理机制
- pytorch图像预处理
- UVALive6050 Primes【素数筛选+前缀和】
- windows 7 精彩新功能
- Java入门——第九天
- 菜鸟学Linux 第048篇笔记 配置slave server
- 香山芯片调试目标完成,直播完毕
- 在使用git bash输入命令时,已输入命令按Backspace键无法删除
- [跑步] 跑步者的力量训练
- String去除后面指定字符串