【Lidar】基于Python的三維點云數據轉二維平面+散點圖繪制

? ? ? ? 最近一直在搞點云相關的操作,有時候在處理點云數據時需要查看處理后的數據是否滿足需求,所以就想著寫一套展示點云的代碼。之前已經分享過如何可視化點云了,感興趣的可以自己去看下:【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_pathmatplotlib.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))  # 創建一個新的圖形窗口,設置其大小為8x4ax1 = 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.5ax2 = 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.5ax1.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保存散點圖時,我的是一片空白不知道啥原因也懶得去改了。大家可以在繪制的散點圖上直接點保存即可。總的來說這種思路實現的三維轉二維完全夠用,至少我的需求這段代碼可以實現,具體為什么其他博主用方程解算啥的,就看你們的需求了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215297.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215297.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215297.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

golang https server如何設計方便抓包定位且安全

代碼 測試 用go寫后端https服務時,需要定位https包中的內容是否符合預期。 有涉獵的朋友應該了解過https有一種keylog技術,它允許在HTTPS連接中捕獲和記錄SSL或TLS會話密鑰,以便于調試和分析加密流量。 本文將的就是通過可控制開啟和關閉的…

單身狗(Python)

題目描述 單身狗 “單身狗”是中文對于單身人士的一種愛稱。本題請你從上萬人的大型派對中找出落單的客人,以便給予特殊關愛。 輸入格式: 輸入第一行給出一個正整數 N(≤50000),是已知夫妻/伴侶的對數;…

CPU 混合推理,非常見大模型量化方案:“二三五六” 位量化

本篇文章聊聊網上聊的比較少的具體量化操作,非常見整型位數的量化,來自讓各種開源模型能夠在 CPU 環境、CPU & GPU 環境混合推理的技術方案:llama.cpp 。 寫在前面 接下來,有計劃分享一些關于各種開源模型的實踐內容。為了能…

安裝ThingBox Eclipse Plugin

1. ChatGPT問 The latest version of the ThingBox Eclipse Plugin requires Eclipse IDE 2021-06 or later. 2. PTC官網下載 MED-61378-CD-092_F000_Eclipse-Plugin-9-0-1.zip文件, 和 MED-61098-CD-085_F000_ThingWorx-Extension-SDK-8-5-0(需要賬號&#xff09…

虛擬化邏輯架構:KVM虛擬機通過OVS端口組實現網絡連接

目錄 一、實驗 1.CentOS 7 安裝 OpenVSwitch(構建RPM安裝包) 2.KVM虛擬機通過OVS端口組實現網絡連接 二、問題 1.安裝openvswitch-2.5.10報錯 2.virt-install未找到命令 3.如何刪除自定義網絡 一、實驗 1.CentOS 7 安裝 OpenVSwitch(構建RPM安裝包&#xff…

字符串知識點

一. 1.字符占據一個字節 2.字符數組:char name[15] { W, a, n, g, L, i}; 字符串:char name[15] “Wang Li”; 二. 1.字符串:為有效長度(有效字符的個數)而不是字符數組的長度; 2.&#…

創建一個有陰影的threejs三維幾何體

import * as THREE from "three" import { OrbitControls } from three/examples/jsm/controls/OrbitControlsconst width window.innerWidth; const height window.innerHeight;//創建場景 const scene new THREE.Scene(); scene.background new THREE.Color(#6…

LinuxBasicsForHackers筆記 --Python 腳本基礎

添加Python模塊 Python 有一個專門用于安裝和管理 Python 包的包管理器,稱為 pip(Pip Installs Packages)。由于我們在這里使用 Python 3,因此您將需要 Python 3 的 pip 來下載和安裝軟件包。默認情況下應包含 Pip,但…

學習Node.js與Webpack總結

今天學習了模塊化的簡介,其實一個項目是由很多個模塊文件組成的,它們有它們各自的功能和用途來協助這個項目的完成,這樣的模塊組成有很多的好處比如提高代碼的復用性、還可以按需加載、還有獨立的作用域,還需要搞清楚的一點就是No…

如何截取Hive數組中的前N個元素?

文章目錄 1、需求描述2、使用索引3、使用posexplode()4、轉換為字符串操作 1、需求描述 需求:截取任意給定數組中的前N個元素,返回截取后的子數組 假設我們有如下三種類型的Hive數組: select array(1,2,3,4) -- [1,2,3,4] selec…

vue前端訪問Django channels WebSocket失敗

現象 前端報錯:SSH.vue:51 WebSocket connection to ‘ws://127.0.0.1:8000/server/terminal/120.59.88.26/22/1/’ failed: 后端報錯:Not Found: /server/terminal/120.79.83.26/22/1/ 原因 django的版本與channels的版本不匹配(django…

關于個人職業選擇

職業選擇,一直是個老生常談的話題。這并不是一個容易做的決定。 讓我們來看看AI怎么說。 首先是方向性的回答: 然后是一些具體的回答 我個人比較傾向于深耕網絡安全。這是一個很有趣也是一個持續發展著的領域。 不知道關于這個事情你怎么看&#xff0…

在線學習平臺-課程分頁、用戶管理、教師查詢

在線學習平臺------手把手教程👈 用戶管理 添加功能增強 新增屬性 若依里的用戶模塊(SysUser)是沒有課程這一屬性的,要實現我們自己的課程分頁查詢功能 這個位置傳入的實體類SysUser要加上classId,記得加上get、set方法 更改sql語句 ctrl 鼠標左鍵不斷點進去…

DS二叉排序樹之刪除

Description 給出一個數據序列,建立二叉排序樹,并實現刪除功能 對二叉排序樹進行中序遍歷,可以得到有序的數據序列 Input 第一行輸入t,表示有t個數據序列 第二行輸入n,表示首個序列包含n個數據 第三行輸入n個數據…

藍橋杯周賽 第 1 場 強者挑戰賽 6. 小球碰撞【算法賽】(思維題/最長上升子序列LIS)

題目 https://www.lanqiao.cn/problems/9494/learning/?contest_id153 思路來源 Aging代碼 題解 二分時間t&#xff0c;第i個小球對應一個起點pi、終點pit*vi的區間&#xff0c;問題轉化為&#xff0c; 選最多的區間&#xff0c;使得不存在區間包含&#xff08;即li<l…

微信小程序過濾器之計算當前時間差

微信小程序過濾器之計算當前時間差 前言一、wxs簡介二、使用步驟1.定義2.使用 前言 最近遇到了一個需求&#xff0c;將小程序里面的具體時間2023-12-11 09:41:06轉為當前時間差10小時前&#xff0c;這塊可以使用js邏輯函數對數據進行處理&#xff0c;但這里我們采用微信小程序…

Error: Failed to resolve vue/compiler-sfc——vite項目啟動報錯——npm run serve

運行項目時&#xff0c;報錯如下&#xff1a; Error: Failed to resolve vue/compiler-sfc 根據報錯信息的提示&#xff1a;vue的版本必須大于3.2.25&#xff0c;經過查看package.json文件&#xff0c;可以看到vue的版本為3.2.36&#xff0c;是滿足條件的。 因此考慮緩存問題&…

【OPNEGIS】Geoserver原地升級jetty,解決Apache HTTP/2拒絕服務漏洞 (CVE-2023-44487)

Geoserver是我們常用的地圖服務器&#xff0c;在開源系統中的應用比較廣泛。在實際環境中&#xff0c;我們可能會選用官方的二進制安裝包進行部署&#xff0c;這樣只要服務器上有java環境就可以運行&#xff0c;方便在現場進行部署。 1.問題來源 這次由于甲方一月一次的漏洞掃…

Mysql表的數據類型

數據類型 https://www.sjkjc.com/mysql/varchar/ MySQL 中的數據類型包括以下幾個大類&#xff1a; 字符串類型 數字類型 日期和時間類型 二進制類型 地理位置數據類型 JSON 數據類型 MySQL 字符串數據類型 VARCHAR&#xff1a;純文本字符串&#xff0c;字符串長度是可變的…

智能優化算法應用:基于陰陽對算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于陰陽對算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于陰陽對算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.陰陽對算法4.實驗參數設定5.算法結果6.參考文…