realsense D435i保存的点云文件xxx.pcd,有时候需要对数据进行处理,发现rgb的TYPE值为U,如下格式:
# .PCD v0.7 - Point Cloud Data file format
VERSION 0.7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F U
COUNT 1 1 1 1
WIDTH 118294
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 118294
DATA ascii
-0.35727233 -0.26075777 0.66200006 9012606
-0.35607648 -0.26115167 0.66300005 9275776
-0.35487542 -0.26154557 0.66400003 9407360
-0.35313725 -0.26154557 0.66400003 9276287
...
TYPE F F F U:其中U是uint,而有时候需要rgb值为分开的r g b值,换算关系如下:
r = int(data/256**2%256)
g = int(data/256%256)
b = int(data%256)
将xxx.pcd改成xxx.txt(ASCII格式是可以直接改为txt格式,可以直接打开),删掉pcd格式部分,只保留数据部分,运行下面程序(注意路径哈):
print('data is processing...')
with open("/home/su/Desktop/data_realsense/pointcloud11.txt","r") as f:
for line in f.readlines():
curline=line.strip().split(" ")
ff=open("/home/su/Desktop/data_realsense/061.txt",'a+')
if curline[0]=='nan' and curline[1]=='nan' and curline[2]=='nan':
curline[0]=''
curline[1]=''
curline[2]=''
curline[3]=''
cur4=''
cur5=''
ff.write(curline[0])
ff.write(curline[1])
ff.write(curline[2])
ff.write(curline[3])
ff.write(cur4)
ff.write(cur5)
else:
ff.write(curline[0]+' ')
ff.write(curline[1]+' ')
ff.write(curline[2]+' ')
curl3=int(int(curline[3])/256**2%256)
ff.write(str(curl3)+' ')
curl4=int(int(curline[3])/256%256)
ff.write(str(curl4)+' ')
curl5=int(int(curline[3])%256)
ff.write(str(curl5)+'\n')
ff.close
因为我的realsense保存的pcd文件中存在nan,可能是超距或者其他问题,所以加进去了nan值判断。