0.引言

\qquadROS的PCL库支持python读取点云,ROS1关联的是python2(2.7),ROS2关联的是python3(>=3.5),但这对于windows的用户和没装ROS的ubuntu用户似乎不够友好。下面就介绍两种不需要ros的方法。
\qquad点云的fileds有好几种,XYZ,XYZI,XYZRGB,XYZRGBA,本文以XYZI为例讲解,如果是RGB类型的参考以下链接:

https://blog.csdn.net/qq_35565669/article/details/106687208

1.python2读取点云

在python2的环境下:

pip2 install pypcd

注意,python3不能安装这个包

参考代码:

#!/usr/bin/python2
import pypcd
import numpy as np
import os
from tqdm import tqdm
pcd_dir = '/data3/data/SemiAuto_Calib/PC2_CV3/PC2_CV/pcd'
out_pcd_dir = "data/pcd"
pcd_files = [file for file in os.listdir(pcd_dir) if os.path.splitext(file)[1]=='.pcd']
pcd_files.sort()
os.makedirs(out_pcd_dir)
for file in tqdm(pcd_files,desc="pcd"):cloud = pypcd.PointCloud.from_path(os.path.join(pcd_dir,file))pcd_array = cloud.pc_data.view(np.float32).reshape(cloud.pc_data.shape+(-1,))  # numpy.ndarray (N,4)np.save(os.path.join(out_pcd_dir,os.path.splitext(file)[0]+".npy"),pcd_array)  # 读取时np.load(file)

Windows用户可删除第一行注释,并切换到python2环境运行此脚本。

2.python3读取点云

2.1. pclpy

需要python3.6的环境,安装pclpy

pip3 install pclpy

python3.6环境用户直接跳过以下内容


原github网址:

https://github.com/davidcaron/pclpy

注:原github网址提示兼容的版本:

若不是python3.6则不能直接通过pip安装(无pypi的二进制文件),需要通过conda安装:
conda install -c conda-forge -c davidcaron pclpy不建议使用,安装了10分钟仍然在等待,而且是强制安装。


参考代码:

import pclpy
from pclpy import pcl
import numpy as np
obj = pclpy.pcl.PointCloud.PointXYZI()
pcl.io.loadPCDFile('PC2_CV\pcd\PointXYZI_001.pcd',obj)
np_xyz = obj.xyz
insty = obj.intensity[:,None]
print(np_xyz.shape,insty.shape)

输出:

(28800, 3) (28800, 1)

一个是XYZ坐标,一个是intensity强度。
另外,这个库还可以像pcl一样展示点云

参考:https://www.codeleading.com/article/19791179164/

import pclpy
from pclpy import pcl
obj=pclpy.pcl.PointCloud.PointXYZI()
pcl.io.loadPCDFile('PC2_CV\pcd\PointXYZI_001.pcd',obj)
viewer=pcl.visualization.PCLVisualizer('pcd-viewer')
viewer.addPointCloud(obj)
while(not viewer.wasStopped()):viewer.spinOnce(100)

不怎么好看,但是可以随便旋转。

2.2. open3d读取

open3d库相较于pclpy要大很多,但是对不同版本的python均兼容,也是直接通过pip安装。

【pcl官网教程链接】

numpy转open3d格式

import open3d as o3d
import numpy as np
xyz = numpy.random.rand(10,3)
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(xyz)
o3d.io.write_point_cloud("test.ply", pcd)

open3d转numpy格式

import open3d as o3d
import numpy as np
pcd_load = o3d.io.read_point_cloud("test.ply")
xyz_load = np.asarray(pcd_load.points)

本文教程展示的是ply格式的点云,实际上,pcd、ply、obj格式的诸多格式点云open3d均可以随意读写,所以只需要学会将numpy转为open3dd的pointcloud格式,即可保存为任何一种形式的点云。以下是一个官网教程的案例

# examples/Python/Basic/file_io.pyimport open3d as o3dif __name__ == "__main__":print("Testing IO for point cloud ...")pcd = o3d.io.read_point_cloud("../../TestData/fragment.pcd")print(pcd)o3d.io.write_point_cloud("copy_of_fragment.pcd", pcd)print("Testing IO for meshes ...")mesh = o3d.io.read_triangle_mesh("../../TestData/knot.ply")print(mesh)o3d.io.write_triangle_mesh("copy_of_knot.ply", mesh)print("Testing IO for textured meshes ...")textured_mesh = o3d.io.read_triangle_mesh("../../TestData/crate/crate.obj")print(textured_mesh)o3d.io.write_triangle_mesh("copy_of_crate.obj",textured_mesh,write_triangle_uvs=True)copy_textured_mesh = o3d.io.read_triangle_mesh('copy_of_crate.obj')print(copy_textured_mesh)print("Testing IO for images ...")img = o3d.io.read_image("../../TestData/lena_color.jpg")print(img)o3d.io.write_image("copy_of_lena_color.jpg", img)

附:本人在安装open3d时还遇到了一个奇怪的问题
Cannot uninstall ‘terminado’. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
若有遇到同样问题的伙伴,可以参考以下解决方案:

pip install terminado==0.9.1 --ignore-installed

python读取pcd点云/转numpy(python2+python3,非ROS环境)相关推荐

  1. ROS-PCL读取pcd点云数据并在rviz中进行显示

    环境: Ubuntu18.04 ROS melodic C++ 创建工作空间和功能包 cd Downloads/ROS mkdir -p pcdreadshow_ws/src cd src catki ...

  2. python读取pcd文件_PCD文件格式转换脚本

    标签: 在写一个重建算法的时候需要用到点坐标和法向的数据文件,于是向利用pcl中的法向计算模块来生成法向.输出后法向文件中包含曲率信息,但是这是不需要的.于是自己写了一个python小脚本实现格式转换 ...

  3. python读取 pcd 数据 三种方法

    代码在git import open3d as o3d import numpy as npdef read_pcd(file_path):pcd = o3d.io.read_point_cloud( ...

  4. python 读取最新阿里云RDS数据库备份并下载

    首先需要安装阿里云的SDK库 阿里云SDK核心库PIP安装命令pip install aliyun-python-sdk-core 阿里云关系型数据库  PIP安装命令:pip install ali ...

  5. 三维目标检测:(一)制作自己的ModelNet数据集(1.读取pcd文件为numpy数组)

    Python读取pcd文件为numpy数组 pcd文件的格式 读取pcd文件存储到numpy数组中 补充 pcd文件的格式 1.第二行:每行数据的内容 可能是(X Y Z R G B)或者(X Y Z ...

  6. 点云学习笔记7——python pcl将点云数据转换成俯视图(鸟瞰图)

    点云学习笔记7--python pcl将点云数据转换成俯视图(鸟瞰图) 环境安装 点云数据 代码 效果图 参考 环境安装 可以参考我另外一篇文章: 点云学习笔记3--点云库(PCL)安装与测试教程 点 ...

  7. ROS下Python读取ft_300传感器数据

    ROS下Python读取ft_300传感器数据 硬件条件: ur3 ft_300 ros:melodic #!/usr/bin/env python2 import rospy from geomet ...

  8. python 读取excel表数据_5分钟学会用Python 读取Excel

    5分钟学会用Python 读取Excel 日常办公使用频率最高的软件非Excel莫属了,如果我们遇到需要导入别人的Excel进行后续数据分析.读取内容等操作,我们该怎么办呢? 测试开发哥哥说:莫要慌, ...

  9. python读取xls文件_从python中的xls读取unicode

    我正在尝试使用 Python读取.xls文件.该文件包含多个非ascii字符(即äöü).我已经尝试过使用openpyxls和xlrd(我对xlrd寄予厚望,因为它无论如何都会读取unicode中的所 ...

最新文章

  1. 把握春招,收下这份GitHub万星的ML算法面试大全!
  2. 让数字校园走向云端【我身边的戴尔企业级解决方案】
  3. 腾讯云 wdcp ip:8080打不开,wdcp phpmyadmin打不开
  4. 如何使用eclipse创建项目
  5. python3解释器执行long(10)的结果为_Python3解释器执行'AB2C3D'.lower().title()的结果是( )。...
  6. java获取文件新增内容_关于java生成文件,立即又读这个文件但又找不到文件新增内容的问题...
  7. MySQL—Linux查看客户端连接信息(连接数、进程等)及SpringBoot配置数据库模板
  8. 用js来实现那些数据结构01(数组篇01-数组的增删)
  9. linux 设备模型详解,Linux2.6 设备模型之input子系统详解
  10. icloud 照片同步_如何确保Mac和iPhone的照片同步到iCloud
  11. 印度网民集体删除中国APP,网友评论亮了
  12. android版本8.1.0和9的区别,安卓8.1和9.0的区别是什么
  13. 不同IP网段的PLC进行S7通信(PUT_GET)的具体步骤
  14. wifidog 整体分析
  15. 手撕七大排序 (二)
  16. Vite-babysitter 像月嫂?保姆?照顾孩子一般为你讲解Vite源码。
  17. 《天道》之丁元英的30句经典语录
  18. Linux 网卡配置
  19. 如何使用WRLD构建教练假期展示柜
  20. hualinux1.9 基础练习:如何删除900W单目录小文件

热门文章

  1. Redis(一):什么是NoSQL与NoSQL分类
  2. Flask form(登录,注册)
  3. ApacheHttpServer修改httpd.conf配置文件
  4. windows 下 git 禁用 CRLF 转换 LF
  5. Kubernetes Master High Availability 高级实践
  6. UVa 988 - Many Paths, One Destination
  7. java多张图片合成一张_1分钟学会“全景照片”拍摄技巧,从单反拍摄到PS合成,收藏备用...
  8. Eclipse Console 加大显示的行数,禁止弹出
  9. Uber如何使用go语言创建高效的查询服务
  10. android oom工具,Android OOM-Heap,MAT工具检测内存泄露