python绘制3d点云_python读取三维点云球坐标数据并动态生成三维图像与着色

关键步骤:

1.首先通过读取.txt文本数据并进行一系列字符串处理,提取显示所需要的相关数据矩阵

2.然后利用python的matplotlib库来进行动态三维显示

备注:matplotlib在显示2d数据可视化方面有着绝对的优势,但是在三维点云显示方面则存在很多问题,首先一个就是显示几千几万点以上甚至更多三维点的时候,电脑CPU明显跟不上,计算机显示明显变得卡顿,所以当需要显示更多的点的时候,建议使用python的另一个利用GPU渲染的库vispy,本人亲测,普通i5,GTX750台式机显示个几千万个点是毫无压力的

import numpy as np

import math

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

from matplotlib.animation import FuncAnimation

f=open('data.txt','r')

point=f.read()

f.close()

l1=point.replace('\n',',')

l2=l1.replace(' ',',')

l3=l2.split(',')

#print(l3)

m1=np.array(l3)

m2=m1.reshape(2664,6)

m3=[]

for each in m2:

each_line=list(map(lambda x:float(x),each))

m3.append(each_line)

m4=np.array(m3)

print(m4)

yaw=[i[0] for i in m4]

pitch=[i[1] for i in m4]

radius=[i[2] for i in m4]

c1=[i[3:6] for i in m4]

c2=np.array(c1)

c3=c2.reshape(2664,3)

print(c3)

x=[]

y=[]

z=[]

for i in range(len(m4)):

x.append(radius[i]*math.sin(0.0174532924*pitch[i])*math.sin(0.0174532924*yaw[i]))

y.append(radius[i]*math.cos(0.0174532924*pitch[i]))

z.append(radius[i]*math.sin(0.0174532924*pitch[i])*math.cos(0.0174532924*yaw[i]))

# print(x)

# print(y)

# print(z)

def animate():

return point

def init():

return point

fig=plt.figure(figsize=(16,9),dpi=120)

ax=fig.add_subplot(111,projection='3d')

plt.title('point')

ax.set_xlabel('X Label')

ax.set_ylabel('Z Label')

ax.set_zlabel('Y Label')

anim = FuncAnimation(fig,animate, frames=np.arange(100), init_func=init,

interval=100, blit=True)

for i in range(2664):

point=ax.scatter(z[i],x[i],y[i],c=(c3[i]/255),marker='.',s=10,linewidth=1,alpha=1,cmap='spectral')

plt.ion()

plt.pause(0.01)

plt.close

plt.show()

数据点未进行着色时的情况显示如下:

你可能感兴趣的:(python绘制3d点云)