计算机视觉:点云的PCD和BIN格式及其转换与可视化

这篇具有很好参考价值的文章主要介绍了计算机视觉:点云的PCD和BIN格式及其转换与可视化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

点云PCD格式和BIN格式

点云数据通常以不同的格式存储,其中PCD(Point Cloud Data)和BIN(Binary)是两种常见的格式,用于表示三维点云数据。下面是它们的具体介绍:

PCD 格式(Point Cloud Data)

PCD格式是一种常见的开放式点云数据存储格式,最初由ROS(Robot Operating System)中的PCL(Point Cloud Library)项目引入,现在广泛用于点云数据的存储和共享。

PCD文件通常是文本文件,以ASCII或二进制形式存储。ASCII格式易于阅读和编辑,但文件较大。二进制格式通常更紧凑,适用于大型点云数据。

PCD文件包含点云的几何信息和属性信息,如点的坐标、颜色、法线等。它还可以包含元数据,以描述点云的特性,如坐标系、点云类型等。

PCD格式具有广泛的支持,可以使用各种点云处理工具来读取和写入PCD文件。

BIN 格式(Binary)

BIN格式是一种更底层的点云数据存储格式,通常以二进制形式存储,因此在文件中的数据较紧凑,适用于大型点云数据的存储。

BIN文件通常只包含点云的几何信息,如点的坐标,而不包含额外的属性信息。这使得它适用于在存储和传输时保持数据的紧凑性。

与PCD不同,BIN格式通常不包含元数据,因此在读取时需要额外的信息来解释数据,如点的数量和坐标表示。

PCD到BIN的格式转换

在Kitti数据集中,点云以BIN的格式存储,在项目的实操中经常需要将采集得到的PCD格式点云转换成BIN格式,以方便后续的模型训练或测试。以下代码使用python语言实现了点云从PCD到BIN的格式转换:

默认情况下,PCD格式的点云保存在./pcd文件夹下,生成的BIN格式点云保存在./bin文件夹下。

import numpy as np
import os
import argparse
import pypcd
from tqdm import tqdm

def main():
    ## Add parser
    parser = argparse.ArgumentParser(description="Convert .pcd to .bin")
    parser.add_argument(
        "--pcd_path",
        help=".pcd file path.",
        type=str,
        default="./pcd"
    )
    parser.add_argument(
        "--bin_path",
        help=".bin file path.",
        type=str,
        default="./bin"
    )
    args = parser.parse_args()

    ## Find all pcd files
    pcd_files = []
    for (path, dir, files) in os.walk(args.pcd_path):
        for filename in files:
            # print(filename)
            ext = os.path.splitext(filename)[-1]
            if ext == '.pcd':
                pcd_files.append(path + "/" + filename)

    ## Sort pcd files by file name
    pcd_files.sort()   
    print("Finish to load point clouds!")

    ## Make bin_path directory
    try:
        if not (os.path.isdir(args.bin_path)):
            os.makedirs(os.path.join(args.bin_path))
    except OSError as e:
        if e.errno != errno.EEXIST:
            print ("Failed to create directory!!!!!")
            raise

    ## Converting Process
    print("Converting Start!")
    for pcd_file in tqdm(pcd_files):
        ## Get pcd file
        pc = pypcd.PointCloud.from_path(pcd_file)
	
        ## Generate bin file name
        ## bin_file_name = "{}_{:05d}.bin".format(args.file_name, seq)
		pcd_name = pcd_file.split('/')[2]
		bin_file_name = pcd_name.split('.')[0]+'.'+pcd_name.split('.')[1]+'.bin'
		## print bin_file_name        
		bin_file_path = os.path.join(args.bin_path, bin_file_name)
        
        ## Get data from pcd (x, y, z, intensity, ring, time)
        np_x = (np.array(pc.pc_data['x'], dtype=np.float32)).astype(np.float32)
        np_y = (np.array(pc.pc_data['y'], dtype=np.float32)).astype(np.float32)
        np_z = (np.array(pc.pc_data['z'], dtype=np.float32)).astype(np.float32)
        np_i = (np.array(pc.pc_data['intensity'], dtype=np.float32)).astype(np.float32)/256
        # np_r = (np.array(pc.pc_data['ring'], dtype=np.float32)).astype(np.float32)
        # np_t = (np.array(pc.pc_data['time'], dtype=np.float32)).astype(np.float32)

        ## Stack all data    
        points_32 = np.transpose(np.vstack((np_x, np_y, np_z, np_i)))

        ## Save bin file                                    
        points_32.tofile(bin_file_path)

    
if __name__ == "__main__":
    main()

拷贝代码写入到pcd2bin.py文件中,通过以下命令运行代码:

 # []表示可省略
python pcd2bin.py [--pcd_path=./pcd] [--bin_path=./bin]

点云可视化

可视化的目的是验证格式转换前后,点云是否一样。

PCD格式的点云可以使用诸多软件进行可视化,例如MeshLab等,也可以使用如下的代码对PCD格式的点云进行可视化:

import numpy as np
import open3d as o3d
from open3d import geometry

def main():

    #创建窗口对象
    vis = o3d.visualization.Visualizer()
    #设置窗口标题
    vis.create_window(window_name="kitti")
    #设置点云大小
    vis.get_render_option().point_size = 1
    #设置颜色背景为黑色
    opt = vis.get_render_option()
    opt.background_color = np.asarray([0, 0, 0])
    #################################################################################################
    #读取点云文件,创建点云对象
    pcd = o3d.io.read_point_cloud("./test.pcd")
    #设置点的颜色为白色
    pcd.paint_uniform_color([1,1,1])
    #将点云加入到窗口中
    vis.add_geometry(pcd)

    vis.run()
    vis.destroy_window()
    
if __name__=="__main__":
    main()

使用如下代码对生成的BIN格式点云进行可视化:

import numpy as np
import mayavi.mlab
 
# lidar_path换成自己的.bin文件路径
pointcloud = np.fromfile(str("./test.bin"), dtype=np.float32, count=-1).reshape([-1, 4])
 
x = pointcloud[:, 0]  # x position of point
y = pointcloud[:, 1]  # y position of point
z = pointcloud[:, 2]  # z position of point
 
r = pointcloud[:, 3]  # reflectance value of point
d = np.sqrt(x ** 2 + y ** 2)  # Map Distance from sensor
 
degr = np.degrees(np.arctan(z / d))
 
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.show()**加粗样式**

若出现module 'pypcd' has no attribute 'PointCloud'的报错,可以尝试将

import pypcd

修改为文章来源地址https://www.toymoban.com/news/detail-774584.html

from pypcd import pypcd

到了这里,关于计算机视觉:点云的PCD和BIN格式及其转换与可视化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机视觉基础知识(八)--点云模型

    三维图像 一种特殊的信息表达形式; 特征是表达的空间中有三个维度的数据; 是对一类信息的统称; 信息的表现形式: 深度图:以灰度表达物体与相机的距离 几何模型:由cad软件建立 点云模型:所有逆向工程设备都将物体采样为点云 和二维图像相比; 三维图像借助第三

    2024年01月25日
    浏览(53)
  • 第二章 python-pcl、open3d读取、显示pcd、bin等格式点云数据

    点云数据实际上就是许多组点的集合,每个点由{x,y,z}组成。当然理论上的只包含有3D坐标。 实际激光雷达获取的点云数据还会包含强度、反射率等等。但我们一般只用提取{x,y,z}来处理即可。 点云数据相比于其他传感器数据的核心优势就是在于 精准的深度信息。可惜获取具体

    2024年01月16日
    浏览(61)
  • 计算机视觉 用于网格/点云等数据可视化的Python库

            很长一段时间,人们主要使用Matplotlib在Python中可视化3D内容。但是它不支持 GPU 硬件加速,所以很多人使用点云库(PCL)作为网格和点云可视化和分析的工具。PCL当然是用于 3D 分析的最佳库之一,而且它是用 C++ 构建的,Python包装器仅包含主PCL库功能的一小部分,

    2024年02月04日
    浏览(51)
  • 【点云处理教程】00计算机视觉的Open3D简介

            Open3D 是一个开源库,使开发人员能够处理 3D 数据。它提供了一组用于 3D 数据处理、可视化和机器学习任务的工具。该库支持各种数据格式,例如 .ply、.obj、.stl 和 .xyz,并允许用户创建自定义数据结构并在程序中访问它们。 Open3D 广泛应用于机器人、增强现实和自

    2024年02月14日
    浏览(47)
  • 【计算机视觉】基于三维重建和点云处理的扫地机器人寻路

    [摘要] 扫地机器人的使用已经越发普及,其中应用到了三维重建的知识。本项目旨在设计由一   定数量的图像根据算法完成三维模型的建立,并利用三维数据最终得到扫地机器人的行驶路   线,   完成打扫机器人成功寻路的任务   。本项目采用的方法是 SFM-MVS   、Colmap  

    2024年01月21日
    浏览(58)
  • 【计算机视觉】图片文件格式的讲解

    图片文件格式有可能会对图片的文件大小进行不同程度的压缩,图片的压缩分为有损压缩和无损压缩两种。 有损压缩。指在压缩文件大小的过程中,损失了一部分图片的信息,也即降低了图片的质量,并且这种损失是不可逆的,我们不可能从有一个有损压缩过的图片中恢复出

    2024年02月09日
    浏览(46)
  • 点云pcd转bin文件,已排坑,亲测有效!

    详见:https://github.com/Zhou-Renjie/pcd2bin 处理的主要问题(下面描述的所需安装和复制的文件均已上传知上诉链接): Possible error 1. Microsoft Visual C++ 9.0 is required The url http://aka.ms/vcpython27 is no longer valid. You can install vcForPYTHon27.msi directly. 2. failed with exit status 2 Put stdint.h into C:Users*

    2024年02月15日
    浏览(74)
  • 计算机视觉——【数据集】MOT17、COCO数据输入格式、数据集可视化脚本

    写在前面:本篇博文的目的是1. 理清MOT17数据集中文件及其内容的含义;2. COCO数据输入格式和YOLO数据输入格式和VOC数据输入格式的区别;3. 提供一个数据集可视化脚本,可以选中某个数据集,将该数据集中的groundtruth可视化在jpg上并生成视频播放。 数据格式的含义: 数据集

    2024年02月08日
    浏览(45)
  • 计算机视觉 计算机视觉识别是什么?

    计算机视觉识别(Computer Vision Recognition)是计算机科学和人工智能领域中的一个重要分支,它致力于使计算机系统能够模拟和理解人类视觉的过程,从而能够自动识别、分析和理解图像或视频中的内容。这一领域的发展旨在让计算机具备视觉感知和理解的能力,使其能够从视

    2024年02月07日
    浏览(55)
  • 计算机视觉(P2)-计算机视觉任务和应用

    在本文中,我们将探讨主要的计算机视觉任务以及每个任务最流行的应用程序。         图像分类是计算机视觉领域的主要任务之一[1]。在该任务中,经过训练的模型根据预定义的类集为图像分配特定的类。下图是著名的CIFAR-10数据集[1],它由十个类别的8000万张图像组成

    2024年02月02日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包