Python讀取pcd點雲檔案

2021-10-07 02:34:09 字數 3824 閱讀 1046

關於kinect採集點雲資料,可以參考

有兩種方法讀取pcd檔案,使用python的庫open3d讀取,或者直接當做txt檔案讀取,然後python處理資料

目錄

open3d讀取點雲

python直接讀取

import open3d as o3d

import numpy as np

def read_pcd(file_path):

pcd = o3d.io.read_point_cloud(file_path)

print(np.asarray(pcd.points))

colors = np.asarray(pcd.colors) * 255

points = np.asarray(pcd.points)

print(points.shape, colors.shape)

return np.concatenate([points, colors], axis=-1)

注意讀取的點雲三維座標和顏色是分開的,分別是points和colors,而且colors中的rgb資料是歸一化的,所以要乘以255.讀取的結果為

[[  0.49283338   1.870551     3.8150003  106.         112.

128. ]

[ 0.50465167 1.8759862 3.8260002 129. 133.

149. ]

[ 0.51545358 1.8775003 3.8290002 138. 141.

155. ]

[ 0.52380067 1.8701893 3.8140001 142. 144.

155. ]

[ 0.53598863 1.8766096 3.8270001 148. 150.

161. ]

[ 0.5481053 1.8825409 3.8390002 157. 161.

172. ]

[ 0.55548692 1.8722914 3.8180001 156. 160.

170. ]

[ 0.57120341 1.8899956 3.8540001 159. 163.

173. ]

[ 0.57821184 1.8787676 3.8310001 160. 164.

174. ]

[ 0.59047383 1.8847055 3.8430002 161. 165.

175. ]]

因為kinect的使用是用c++,而當對點雲資料進行處理時,使用python比較方便。pcd檔案其實就是乙個txt檔案,裡面儲存了點雲資訊,包括點雲的數目,點雲的型別(是pointxyz還是pointxyzrgb),還有點雲的寬度和高度。

這裡使用的點雲檔案儲存的點是pointxyzrgb型別,每個點儲存了xyz座標資訊,還有argb資訊。可以看到下圖裡三個浮點數就是xyz座標了,後面的4294901502是乙個32位數,argb每個通道對應了8位。要注意的是,透明度a是在rgb前面的,一般是255,所以可以看到argb的二進位制數都很大。

先讀取一下點雲的大小,然後對每行資料處理,把每行的xyzrgba存進乙個列表,最後轉為numpy陣列就行了。

def load_pcd_data(file_path):

pts =

f = open(file_path, 'r')

data = f.readlines()

f.close()

line = data[9]

# print line

line = line.strip('\n')

i = line.split(' ')

pts_num = eval(i[-1])

for line in data[11:]:

line = line.strip('\n')

xyzargb = line.split(' ')

x, y, z = [eval(i) for i in xyzargb[:3]]

argb = xyzargb[-1]

# print type(bgra)

argb = bin(eval(argb))[2:]

a, r, g, b = [int(argb[8 * i:8 * i + 8], 2) for i in range(4)]

assert len(pts) == pts_num

res = np.zeros((pts_num, len(pts[0])), dtype=np.float)

for i in range(pts_num):

res[i] = pts[i]

# x = np.zeros([np.array(t) for t in pts])

return res

最後讀取的效果為

[[  0.49283338   1.870551     3.8150003  255.         106.

112. 128. ]

[ 0.50465167 1.8759862 3.8260002 255. 129.

133. 149. ]

[ 0.51545358 1.8775003 3.8290002 255. 138.

141. 155. ]

[ 0.52380067 1.8701893 3.8140001 255. 142.

144. 155. ]

[ 0.53598863 1.8766096 3.8270001 255. 148.

150. 161. ]

[ 0.5481053 1.8825409 3.8390002 255. 157.

161. 172. ]

[ 0.55548692 1.8722914 3.8180001 255. 156.

160. 170. ]

[ 0.57120341 1.8899956 3.8540001 255. 159.

163. 173. ]

[ 0.57821184 1.8787676 3.8310001 255. 160.

164. 174. ]

[ 0.59047383 1.8847055 3.8430002 255. 161.

165. 175. ]]

可以看出與第一種方法讀取的結果相同,這驗證了第二種方法的正確性。

點雲資料pcd檔案簡介

3 總結 點雲資料是指在乙個三維座標系中的一組向量的集合。這些向量通常以x,z三維座標的形式表示,一般主要代表乙個物體的外表面幾何形狀,除此之外點雲資料還可以附帶rgb資訊,即每個座標點的顏色資訊,或者是其他的資訊。在這裡推薦大家都將都將點雲資料儲存為 pcd檔案,因為有pcl這個開源庫專門處理pc...

python使用pclpy實現PCD點雲讀取和顯示

通過python的pclpy依賴,可以在python中使用pcl點雲庫的介面,呼叫其操作點雲的方法。最官方的pcl的python支援是python pcl,但是我好長時間沒有安裝成功。有一次直接安裝上了pclpy 可以提供過pip安裝也可以在pycharm中查詢安裝,支援python3.6.8 索性...

PCD檔案讀取並顯示

前面一段時間一直在寫 好久都沒有進行程式設計學習,突然覺得無從下手了,翻開以前寫的 練練手,順便記錄下來以便以後自己可以快速熟悉。乙個簡單的點雲pcd檔案讀取,並視覺化。filename pcd read date 2018 3 27 description read pcd files point...