首页 > 编程语言 >【Lidar】基于Python的三维点云数据转二维平面+散点图绘制

【Lidar】基于Python的三维点云数据转二维平面+散点图绘制

时间:2023-12-07 12:44:50浏览次数:47  
标签:point Python show 散点图 Lidar points 点云 path

        最近一直在搞点云相关的操作,有时候在处理点云数据时需要查看处理后的数据是否满足需求,所以就想着写一套展示点云的代码。之前已经分享过如何可视化点云了,感兴趣的可以自己去看下:【Lidar】基于Python的Open3D库可视化点云数据。但是这个是3维展示,不满足我的项目需求,我要看的是x,y平面上的效果,所以今天给大家分享一下如何使用Python将三维点云数据投影至二维平面,并进行点云图的绘制。

1 代码逻辑

        网上有很多资源都是构建投影方程、计算距离、角度啥的进行投影,我个人觉得没多大必要,我们只需要在读取/处理时只选择自己想要平面的点即可,至少我的项目可以满足。

2 完整代码

        这里创建一个一行两列的散点图,用来显示3D和2D的效果,点云保存的代码我没有加进去。看我之前的文章:【Lidar】基于Python的Open3D库、Laspy库保存点云文件/点云格式转换

# -*- coding: utf-8 -*-
"""
@Time : 2023/12/7 9:33
@Auth : RS迷途小书童
@File :Projection of point cloud to 2D.py
@IDE :PyCharm
@Purpose:点云数据投影至平面并显示
"""
import matplotlib  # 导入 matplotlib 库,主要用于绘图
import numpy as np  # 导入 numpy 库,主要用于处理数组
import open3d as o3d  # 导入 Open3D 库,用于处理点云数据
import matplotlib.pyplot as plt  # 导入 matplotlib.pyplot 库,用于创建图像和画图


def point_show(path, save_path):
    # 定义一个函数 point_show,输入参数是点云文件的路径 path 和要保存图像的路径 save_path
    matplotlib.use('tkAgg')
    # 在这里指定GUI后端,这里选择 tkAgg 作为图形用户界面后端
    pcd = o3d.io.read_point_cloud(path)
    # 使用 Open3D 读取点云数据
    print(pcd)  # 输出点云的个数
    points = np.asarray(pcd.points)
    # 将点云数据转化为 numpy 数组
    # print(points.shape)  # 输出数组的形状(行列数)
    fig = plt.figure(figsize=(16, 10))  # 创建一个新的图形窗口,设置其大小为8x4
    ax1 = fig.add_subplot(121, projection='3d')  # 在图形窗口中添加一个3D绘图区域
    ax1.scatter(points[:, 0], points[:, 1], points[:, 2], c='g', s=0.01,
                alpha=0.5)  # 在这个区域中绘制点云数据的散点图,设置颜色为绿色,点的大小为0.01,透明度为0.5
    ax2 = fig.add_subplot(122)  # 在图形窗口中添加一个2D绘图区域
    # 1行2列的图形布局,其中该子图是第2个子图
    ax2.scatter(points[:, 1], points[:, 2], c='g', s=0.01, alpha=0.5)  # 在这个区域中绘制点云数据的散点图,设置颜色为绿色,点的大小为0.01,透明度为0.5
    ax1.set_title('3D')
    ax2.set_title('2D')
    plt.show()  # 显示图形窗口中的所有内容
    plt.savefig(save_path)
    # 将图形窗口中的内容保存到指定的路径


if __name__ == "__main__":
    # 如果这个文件被直接运行而不是被导入作为模块,那么执行以下代码
    point_path = "1 - Cloud.pcd"
    # 定义一个变量 point_path,值为字符串 "1 - Cloud.pcd"
    out_path = r"G:\彭俊喜/1.png"
    # 定义一个变量 out_path,值为一个Windows文件路径
    point_show(point_path, out_path)
    # 调用 point_show 函数,输入参数是 point_path 和 out_path

效果图:

3 总结

        代码中的plt.savefig保存散点图时,我的是一片空白不知道啥原因也懒得去改了。大家可以在绘制的散点图上直接点保存即可。总的来说这种思路实现的三维转二维完全够用,至少我的需求这段代码可以实现,具体为什么其他博主用方程解算啥的,就看你们的需求了。

标签:point,Python,show,散点图,Lidar,points,点云,path
From: https://www.cnblogs.com/RSran/p/17881764.html

相关文章

  • Python制作排班小工具【四】
    一、前言前面我们已经编写好生成排班的所有代码,在PyCharm中能正常运行,可是未安装Python环境的同事无法运行,本文就来介绍如何将Python文件打包成Windows可运行的exe文件。二、打包成exe项目结构很简单,只有两个Py文件加一张GUI图标:Step1:1.在Python项目虚拟环境和系统环境安装pyinstal......
  • python __new__ __init__
    classStudent():def__new__(cls,*args,**kwargs):##创建类的实例print('__new__')returnobject.__new__(cls)##此处返回才会调用__init__def__init__(self):##初始化类的实例print('__init__')classNewInt(int):def__new_......
  • [python]数据分析--数据清洗处理case1
    数据预处理案例1主要涉及pandas读取csv文件,缺失值和重复值处理,分组计数,字段类型转换,结果写入到Excel。根据要求对CSV数据集进行处理要求如下:保留数据关键信息:time、latitude、longtitude、depth、mag、region注意其中的region未直接提供,需要从数据集中的place中获取。......
  • Python绘制相关性热力图
    [Python绘制相关性热力图-知乎](https://zhuanlan.zhihu.com/p/364624304)随便一个数据就可importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltimportseabornassnsplt.rcParams['font.sans-serif']=['ArialUnicodeMS']#让中文的地方显示出来......
  • [Python急救站]回文数的判断
    回文数判断:回文数是指这个数颠倒后,与原数一致,如32223、12221等。第一个程序是由用户输入,并判断是否是回文数。a=eval(input("请输入一个五位数"))b=a//10000+a//1000%10*10+a//100%10*100+a//10%10*1000+a%10*10000ifa==b:print(......
  • Python计算两图相似性-基于互信息(Mutual Information)
    1、简介通过计算两个图片的互信息来表征他们之间的相似度,如果两张图片尺寸相同,还是能在一定程度上表征两张图片的相似性的。但是,大部分情况下图片的尺寸不相同,如果把两张图片尺寸调成相同的话,又会让原来很多的信息丢失,所以很难把握。经过实际验证,此种方法的确很难把握。 2、......
  • 【python】静态函数与类方法
    静态函数与类方法静态函数其实和类的方法没什么关系,它只是恰好定义在类的内部而已,所以这里我用函数(function)来形容它。它可以没有参数:classPerson:@staticmethod#用staticmethod这个修饰器来表明函数是静态的defsayHello():print('Hello')Person......
  • python--元组、列表、集合、字典、函数简单总结与区分
    元组:用“()”,不可修改其中的元素,有索引,tuple可建立一个元组。列表:用“【】”,可修改其中元素,有索引,可用list函数创建。集合:用“{}”,且{}相当于set()相当于set(【】),无序,无索引,可修改其中元素。字典:用”{}“,无索引,可修改其中元素,成对出现(区别于集合)。    例如:mynumber={"a":1,"b"......
  • Python脚本导入Excel文件可视化导出统计工时情况
    在当今快节奏的工作环境中,对员工工时的有效管理和分析变得至关重要。我开发了一个Python脚本,专门用于从Excel文件中导入工时数据,并将这些数据以直观的图表形式进行可视化展示。这一工具的目的是为了帮助企业和组织更好地理解和优化员工的工时分配,进而提升整体的工作效率和决策质......
  • python多线程下载图片
    urls.json文件数据格式如下["https://example.com/image1.jpg","https://example.com/image2.jpg","https://example.com/image3.jpg"] 代码如下importjsonimportrequestsimportthreadingdefdownload_image(url):respo......