精华内容
下载资源
问答
  • 二进制点云数据
    2021-10-09 10:44:56

    将点云pcd文件按不同的方式存储,
    0-AScii
    1-二进制
    2-Binary_Compressed
    代码如下:

    #include <iostream>
    #include <pcl/common/io.h>
    #include <pcl/io/pcd_io.h>
    
    using namespace std;
    
    /* ---[ */
    int
    main (int argc, char** argv)
    {
      if (argc < 4)
      {
        std::cerr << "Syntax is: " << argv[0] << " <file_in.pcd> <file_out.pcd> 0/1/2 (ascii/binary/binary_compressed) [precision (ASCII)]" << std::endl;
        return (-1);
      }
    
      pcl::PCLPointCloud2 cloud;
      Eigen::Vector4f origin; Eigen::Quaternionf orientation;
    
      if (pcl::io::loadPCDFile (string (argv[1]), cloud, origin, orientation) < 0)
      {
        std::cerr << "Unable to load " << argv[1] << std::endl;
        return (-1);
      }
    
      int type = atoi (argv[3]);
    
      std::cerr << "Loaded a point cloud with " << cloud.width * cloud.height << 
                   " points (total size is " << cloud.data.size () << 
                   ") and the following channels: " << pcl::getFieldsList (cloud) << std::endl;
    
      pcl::PCDWriter w;
      if (type == 0)
      {
        std::cerr << "Saving file " << argv[2] << " as ASCII." << std::endl;
        w.writeASCII (string (argv[2]), cloud, origin, orientation, (argc == 5) ? atoi (argv[4]) : 7);
      }
      else if (type == 1)
      {
        std::cerr << "Saving file " << argv[2] << " as binary." << std::endl;
        w.writeBinary (string (argv[2]), cloud, origin, orientation);
      }
      else if (type == 2)
      {
        std::cerr << "Saving file " << argv[2] << " as binary_compressed." << std::endl;
        w.writeBinaryCompressed (string (argv[2]), cloud, origin, orientation);
      }
    }
    

    来源:PCL官方示例

    更多相关内容
  • 循环读取存储格式为32位单精度浮点数的二进制三维点数据文件 转换为点云数据并保存 #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/io/ply_io.h> #include <pcl/point_...

    循环读取存储格式为32位单精度浮点数的二进制三维点数据文件   转换为点云数据并保存

    
    
    #include <iostream>
    #include <pcl/io/pcd_io.h>
    #include <pcl/io/ply_io.h>
    #include <pcl/point_types.h>
    #include <pcl/common/io.h>
    #include <pcl/impl/point_types.hpp>
    #include <pcl/point_cloud.h>
    
    #include <fstream>
    #include <vector>
    using namespace std;
    // int main()
    // {
    //     BYTE s[4];
    
    //     // s[3] = 0x00;
    //     // s[2] = 0x00;
    //     // s[1] = 0x10;
    //     // s[0] = 0x2c;
    //     //ff8f 0843
    //     s[3] = 0x43;
    //     s[2] = 0x77;
    //     s[1] = 0xb1;
    //     s[0] = 0x01;
    
    //     float *pf = (float *)s;
    
    //     printf("10进制%g\n", *pf);
    // }
    
    class Point_3d
    {
    
    public:
        float m_x;
        float m_y;
        float m_z;
    
    public:
        Point_3d(float &x, float &y, float &z) : m_x(x), m_y(y), m_z(z)
        {
        }
    };
    
    vector<Point_3d> get_fs()
    {
        ifstream ifs("scan.bin", std::ios::binary);
        float xyz[3] = {};
        // float xyz_1[3] = {};
        vector<Point_3d> pts;
        if (!ifs)
        {
            cerr << "open error !" << endl;
            abort();
        }
    
        while (!ifs.eof())
        {
            ifs.read((char *)xyz, sizeof(xyz));
    
            Point_3d pt(xyz[0], xyz[1], xyz[2]);
            pts.push_back(pt);
            // ifs.seekg(sizeof(xyz), ios::cur);
            // ifs.read((char *)xyz_1, sizeof(xyz_1));
        }
        ifs.clear();
        ifs.close();
    
        return pts;
    }
    
    int main(int argc, char **argv)
    {
        pcl::PointCloud<pcl::PointXYZ> cloud;
        pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ptr = pcl::PointCloud<pcl::PointXYZ>::Ptr(new pcl::PointCloud<pcl::PointXYZ>);
        // Fill in the cloud data
        cloud.width = 1000;
        cloud.height = 1000;
        cloud.is_dense = false;
        cloud.points.resize(cloud.width * cloud.height);
    
        cloud_ptr->width = cloud.width;
        cloud_ptr->height = cloud.height;
        cloud_ptr->is_dense = cloud.is_dense;
        // cloud_ptr->points.resize (cloud.width * cloud.height);
    
        //   for (size_t i = 0; i < cloud.points.size (); ++i)
        //   {
        //    // cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);
        //    // cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);
        //    // cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);
    
        //         pcl::PointXYZ p;
        //         p.x = 1024 * rand () / (RAND_MAX + 1.0f);
        //         p.y = 1024 * rand () / (RAND_MAX + 1.0f);
        //         p.z = 1024 * rand () / (RAND_MAX + 1.0f);
        //         cloud.points[i].x = p.x;
        //         cloud.points[i].y = p.y;
        //         cloud.points[i].z = p.z;
    
        //         cloud_ptr->points.push_back(p);
        //   }
    
        vector<Point_3d> pts = get_fs();
        for (int i = 0; i < pts.size(); i++)
        {
            cloud.points[i].x = pts[i].m_x;
            cloud.points[i].y = pts[i].m_y;
            cloud.points[i].z = pts[i].m_z;
    
            pcl::PointXYZ p;
            p.x = pts[i].m_x;
            p.y = pts[i].m_y;
            p.z = pts[i].m_z;
            cloud_ptr->points.push_back(p);
        }
    
        std::cerr << "Saving to pcd file " << std::endl;
        pcl::io::savePCDFileASCII("test_pcd0.pcd", cloud);
        pcl::io::savePCDFile("test_pcd1.pcd", *cloud_ptr);
        std::cerr << "Saved " << cloud.points.size() << " data points to test_pcd.pcd." << std::endl;
    
        std::cerr << "Saving to ply file " << std::endl;
        pcl::io::savePLYFile("test_ply.ply", cloud);
    
        for (size_t i = 0; i < cloud.points.size(); ++i)
        {
            //  std::cerr << "    " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;
            std::cerr << "    " << cloud_ptr->points[i].x << " " << cloud_ptr->points[i].y << " " << cloud_ptr->points[i].z << std::endl;
        }
    
        return (0);
    }
    
    //采用CPP模式读二进制文件
    // void DataRead_CPPMode()
    // {
    // 	double pos[200];
    // 	ifstream f("binary.dat", ios::binary);
    // 	if(!f)
    // 	{
    // 		cout << "读取文件失败" <<endl;
    // 		return;
    // 	}
    // 	f.read((char*)pos,200*sizeof(double));
    // 	for(int i = 0; i < 200; i++)
    // 		cout << pos[i] <<endl;
    // 	f.close();
    
    // }

    点云图效果

     

    展开全文
  • pgcopy:使用二进制副本快速加载数据
  • 点云数据csv文件 数据为 x,y,z,多组构成,最终组成了一个大象。 这是为Unity Mesh 或者 粒子系统画点组成点云图的例子数据。
  • pcd点云的存储形式一共有两种,分别是binary和ascll码的形式,其详解见“”“;下面的代码是针对两者的,即都可以适用。 前期准备: open3d的安装: pip install open3d pip install open3d-python==0.7.0.0 (这个...

    pcd点云的存储形式一共有两种,分别是binary和ascll码的形式,其详解见https://blog.csdn.net/qq_37534947/article/details/107187907
    下面的代码是针对两者的,即都可以适用。
    前期准备:
    open3d的安装
    pip install open3d
    pip install open3d-python==0.7.0.0 (这个必须有)
    mayavi的安装:
    需要顺序安装的包vtk、mayavi
    这里推荐whl下载,因为pip直接安装vtk比较慢,下载地址:
    https://download.csdn.net/download/qq_37534947/12515312

    #binary
    import open3d as o3d
    import numpy as np
    import numpy as np
    import mayavi.mlab
    def read_pcd(file_path1):
        pcd = o3d.io.read_point_cloud(file_path1)
        #pcd2 = o3d.io.read_point_cloud(file_path2)
        print(np.asarray(pcd.points))
        #print(np.asarray(pcd2.points))
        #colors = np.asarray(pcd.colors) * 255
        pointcloud = np.asarray(pcd.points)
        #pointcloud2 = np.asarray(pcd2.points)
        print(pointcloud.shape)
        #print(pointcloud2.shape)
        x = pointcloud[:, 0]  # x position of point
        xmin = np.amin(x, axis=0)
        xmax = np.amax(x, axis=0 )
        y = pointcloud[:, 1]  # y position of point
        ymin = np.amin(y, axis=0)
        ymax = np.amax(y, axis=0)
        z = pointcloud[:, 2]  # z position of point
        zmin = np.amin(z, axis=0)
        zmax = np.amax(z, axis=0)
        print(xmin,xmax,ymin,ymax,zmin,zmax)
        d = np.sqrt(x ** 2 + y ** 2)  # Map Distance from sensor
        vals = 'height'
        if vals == "height":
            col = z
        else:
            col = d
        fig = mayavi.mlab.figure(bgcolor=(0, 0, 0), size=(640, 500))
        mayavi.mlab.points3d(x, y, z,
                             col,  # Values used for Color
                             mode="point",
                             # 灰度图的伪彩映射
                             colormap='spectral',  # 'bone', 'copper', 'gnuplot'
                             # color=(0, 1, 0),   # Used a fixed (r,g,b) instead
                             figure=fig,
                             )
        # 绘制原点
        mayavi.mlab.points3d(0, 0, 0, color=(1, 1, 1), mode="sphere",scale_factor=0.2)
        # 绘制坐标
        axes = np.array(
            [[20.0, 0.0, 0.0, 0.0], [0.0, 20.0, 0.0, 0.0], [0.0, 0.0, 20.0, 0.0]],
            dtype=np.float64,
        )
        #x轴
        mayavi.mlab.plot3d(
            [0, axes[0, 0]],
            [0, axes[0, 1]],
            [0, axes[0, 2]],
            color=(1, 0, 0),
            tube_radius=None,
            figure=fig,
        )
        #y轴
        mayavi.mlab.plot3d(
            [0, axes[1, 0]],
            [0, axes[1, 1]],
            [0, axes[1, 2]],
            color=(0, 1, 0),
            tube_radius=None,
            figure=fig,
        )
        #z轴
        mayavi.mlab.plot3d(
            [0, axes[2, 0]],
            [0, axes[2, 1]],
            [0, axes[2, 2]],
            color=(0, 0, 1),
            tube_radius=None,
            figure=fig,
        )
        mayavi.mlab.show()
    
    #mayavi显示点云
    read_pcd("pcdfolder/Benewake_Horn_X2_PointCloud_0023.pcd")#,"pcdfolder/Benewake_Horn_X2_PointCloud_0001.pcd")
    

    分析:
    1)这里open3d的主要作用是打开pcd格式的文件,然后存储到pcd 变量中,可以从shape中看到其大小是(x,3),其中x是指点云的个数。
    2)mayavi主要是用于显示点云,其中包括显示所有的点以及绘制横坐标以及纵坐标和绘制原点等。
    其使用参考链接:
    https://www.cnblogs.com/dalanjing/p/12289517.html
    https://www.cnblogs.com/ssyfj/p/9303698.html

    结果截图:
    在这里插入图片描述

    展开全文
  • PointCloud到图像 一种将三维激光点云数据投影到序列化二... 6个序列化的二进制空间邻域角度图像 7张序列化的RGB彩色图像 依存关系 程序依赖性:PCL1.8.0,OpenCV 3,OpenMP。 无论输入和输出如何,都需要4到5秒钟
  • 点云处理:bin二进制文件转pcd文件

    千次阅读 2022-03-14 19:20:03
    点云数据以浮点二进制文件格式存储,每行包含8个数据,每个数据由四位十六进制数表示(浮点数),每个数据通过空格隔开。一个点云数据由四个浮点数数据构成,分别表示点云的x、y、z、r(强度 or 反射值),点云的...

    一、二进制文件说明

    在这里插入图片描述
    点云数据以浮点二进制文件格式存储,每行包含8个数据,每个数据由四位十六进制数表示(浮点数),每个数据通过空格隔开。一个点云数据由四个浮点数数据构成,分别表示点云的x、y、z、r(强度 or 反射值),点云的存储方式如下表所示:
    即每行包含两点的XYZI,那么只需要对一个点赋值对应的XYZI值,并将该点压入点云中即可。
    在这里插入图片描述

    二、代码

    #include <boost/program_options.hpp>
    #include <pcl/point_types.h>
    #include <pcl/io/pcd_io.h>
    #include <pcl/common/point_operators.h>
    #include <pcl/common/io.h>
    #include <pcl/search/organized.h>
    #include <pcl/search/octree.h>
    #include <pcl/search/kdtree.h>
    #include <pcl/features/normal_3d_omp.h>
    #include <pcl/filters/conditional_removal.h>
    #include <pcl/segmentation/sac_segmentation.h>
    #include <pcl/segmentation/extract_clusters.h>
    #include <pcl/surface/gp3.h>
    #include <pcl/io/vtk_io.h>
    #include <pcl/filters/voxel_grid.h>
    
    #include <iostream>
    #include <fstream>
    
    using namespace pcl;
    using namespace std;
    
    void topcd(string name);
    void topcd(string name) {
    	//string name = "0000000000";
    	///The file to read from.
    	string infile = "D:/数据集/道路点云数据集/2011_09_26/2011_09_26_drive_0070/velodyne_points/data/" + name + ".bin";
    
    	///The file to output to.
    	string outfile = "D:/数据集/道路点云数据集/2011_09_26/2011_09_26_drive_0070/velodyne_points/pcddata/" + name + ".pcd";
    
    	// load point cloud
    	fstream input(infile.c_str(), ios::in | ios::binary);
    	if (!input.good()) {
    		cerr << "Could not read file: " << infile << endl;
    		exit(EXIT_FAILURE);
    	}
    
    	input.seekg(0, ios::beg);
    	pcl::PointCloud<PointXYZI>::Ptr points(new pcl::PointCloud<PointXYZI>);
    	int i;
    	for (i = 0; input.good() && !input.eof(); i++) {
    		PointXYZI point;
    		input.read((char*)&point.x, 3 * sizeof(float));
    		input.read((char*)&point.intensity, sizeof(float));
    		points->push_back(point);
    	}
    	input.close();
    
    	cout << "Read KTTI point cloud with " << i << " points, writing to " << outfile << endl;
    
    	pcl::PCDWriter writer;
    
    	// Save DoN features
    	writer.write<PointXYZI>(outfile, *points, false);
    }
    int main(int argc, char** argv) {
    	string name;
    	for (int i = 0; i < 420; i++) {
    		stringstream ss;
    		ss << setw(10) << setfill('0') << i;
    		string str;
    		ss >> str;         //将字符流传给 str
    		topcd(str);
    	}
    	return 0;
    }
    

    结果如下:

    根据data文件夹下的二进制文件生成了对应点云数据。
    二进制文件
    二进制文件
    pcd文件
    在这里插入图片描述
    pcd文件简单显示:
    在这里插入图片描述

    三、注意

    需要适应于自己的文件名和文件夹哦!

    展开全文
  • # 读取数据 bin 文件 import os import struct def read_data(file): file_path = file_dir+"/"+file final_text = open('final.txt', 'a') data_bin = open(file_path, 'rb') data_size = os.path.getsize...
  • 点云进行matlab三维重建,matlab三维点云显示,matlab源码.rar,点云进行matlab三维重建,11——点云,cameraright.jpg,camera13.jpg,left.m,Chair.mat,Skull.mat,camera23.jpg,TestMyCrust.m,gargo50k.mat,Dino.mat,...
  • 用于加载文件的库。 提供了一个可执行文件pcd2bin ,用于将单精度浮点 3D 点的 ASCII 格式的 PCD 文件转换为二进制 PCD 格式。 这很有用,因为二进制文件的加载速度要快得多。
  • } 三、ASCII和二进制之间的转换 区别:ASCII可以通过记事本打开,显示大家通俗易懂的数字 二进制:计算机能够直接识别,读取速度快,但是用记事本打开乱码 只需要修改保存文件对应的代码即可: pcl::io::...
  • 点云数据格式说明

    千次阅读 2022-04-19 17:14:36
    介绍点云数据格式相关的具体信息
  • 一、 PCL中点云数据类型 由于采集设备不同时输入点云信息不同,比如有的只有法向量,有的伴有颜色,强度等信息。必要时,使用者需要自己定义自己的类型。不过先看看PCL库中定义的点云类型是否已经涵盖。 1)...
  • 1:本程序读取二进制文件,并...2:二进制文件内容一系列的三维点云数据,由扫描仪器扫描获得 3:本程序采用了多线程技术,读取二进制文件时,界面不会卡顿 4:实例二进制文件为data.dat.默认的文本保存地址为c盘根目录
  • 点云数据pcd文件简介

    千次阅读 2021-08-03 10:32:18
    三维点云数据简介 1 什么是点云数据         点云数据是指在一个三维坐标系中的一组向量的集合。这些向量通常以X,Y,Z三维坐标的形式表示,一般主要代表一个物体的外表面...
  • python 读写和合并二进制bin文件,,在烧录程序的时候,需在烧录程序的时候,需要将多个二进制bin文件合成一个,并且要指定数据段地址偏移量,在数据段之间的地址填充默认值0xff。因为不想手动操作,想直接通过make...
  • 最近在学习点云处理的时候用到了Modelnet40数据集,该数据集总共有40个类别,每个样本的点云数据存放在一个TXT文件中,每行的前3个数据代表一个点的xyz坐标。我需要把TXT文件中的每个点读取出来,然后用Open3D进行...
  • CGAL例程:点云数据三维重建

    千次阅读 2022-05-08 20:12:37
    CGAL使用点云数据重建三维表面的例程
  • 0 点云数据的输入与输出 前言 本文是PCL调库学习的第一篇的文章,之所以打算写一个这样的系列,最主要的还是为了自己日后复习,或者做项目时,能够快速的了解某个函数或功能的使用 文章所有代码均参考于pcl官网,...
  • LAS 点云数据格式

    2021-04-22 12:45:57
    从本质上来说,LAS格式是一种二进制文件格式。其目的是提供一种开放的格式标准,允许不同的硬件和软件提供商输出可互操作的统一格式。现在LAS格式文件已成为LiDAR数据的工业标准格式。LAS文件按每条扫描线排列方式存放...
  • 在上一章中,我们介绍了有关QFile和QFileInfo两个类的使用。我们提到,QIODevice提供了read...同时,Qt 还提供了更高一级的操作:用于二进制的流QDataStream和用于文本流的QTextStream。本节,我们将讲解有关QDataS...
  • 目录摘要1 介绍2 研究背景3 数据采集3.1 3D激光扫描3.2 摄影测量3.3 视频测量3.4 RGB-d相机3.5 立体摄像机3.6 不同方法的比较4 数据清洗4.1 混合像素的过滤4.2 其他噪声的过滤5 数据配准5.1 点描述符定义5.2 关键点...
  • las点云数据格式

    千次阅读 2020-12-19 23:23:15
    LIDAR Data: LIDAR数据类似于带有激光... LAS文件是根据几种规格打包的二进制文件。 Las: 二进制格式;是点云lidar数据的一种典型格式。 las文件是根据多种las规格打包而成的二进制文件。 Las 规格 las1.0支持l...
  • 本发明涉及测控技术领域,尤其涉及一种基于点云深度学习的点云数据集制作系统及方法。背景技术:深度学习网络模型一般都是基于64线单帧激光数据集进行。但64线激光器和单帧的限定,造成了工程应用中点云数据到深度...
  • 在Threejs导入显示点云数据

    千次阅读 2019-10-08 17:56:05
    在Threejs导入并显示点云数据 最近在项目中遇到需求,需要在web端显示点云数据。将我的实现步骤介绍在这里供大家参考。我使用的是threejs开源库,最终实现 数据格式 原本是点云数据是ply格式的。在threejs中有ply...
  • 您的问题可以看作是查找连接的组件。您可以使用networkx来获得解决方案,也可以自己实现BFS(广度优先搜索)。在import networkx as nximport numpy as npx = """[ 1. 1. 1. 1. 0. 0. 0. 0. 0. 0....
  • 如何用NumPy读取和保存点云数据 本文首发于微信公众号【DeepDriving】,欢迎关注。 前言 最近在学习点云处理的时候用到了Modelnet40数据集,该数据集总共有40个类别,每个样本的点云数据存放在一个TXT文件中,每行...
  • ASCII到二进制二进制...uu代表“UNIX到UNIX编码”,它负责根据程序的要求从字符串到二进制和ascii值的数据转换。 import binascii text = "Simply Easy Learning" # Converting binary to ascii data_b2a = binasci
  • 文章目录PCL使用心得(一)点云数据读取、保存以及格式自定义前言一、pcd 格式数据读取与写入、自定义点云格式三、自定义点云bin格式读取与存储保存bin读取bin 前言 主要记录PCL库使用过程中的一些内容,方便自己...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,115
精华内容 1,246
关键字:

二进制点云数据