將ContextCapture生成的點雲資料轉化為PCL可以處理的資料格式
阿新 • • 發佈:2018-12-09
示例程式碼:
file = open('point2.txt') # 讀取所需資料 val_list = file.readlines() list_x = [] list_y = [] list_z = [] list_rgb = [] for string in val_list: str2 = string.split(' ') list_x.append(float(str2[0])) list_y.append(float(str2[1])) list_z.append(float(str2[2])) ''' pcd檔案中的格式為x y z rgb而不是分開的r g b,所以在原資料的基礎上要進行變形, 由r g b得到rgb(float):int rgb = ((int)r << 16 | (int)g << 8 | (int)b); 式中的“<<”為左移符號; 由rgb得到r g b(int):int r = (rgb >> 16) & 0x0000ff; int g = (rgb >> 8) & 0x0000ff; int b = (rgb) & 0x0000ff; ''' list_rgb.append(int(str2[3])<<16 | int(str2[4])<<8 | int(str2[5])) max1 = max(list_x) min1 = min(list_x) length1 = max1 - min1 max2 = max(list_y) min2 = min(list_y) length2 = max2 - min2 max3 = max(list_z) min3 = min(list_z) length3 = max3 - min3 # 資料歸一化 list_x_r = [] list_y_r = [] list_z_r = [] for i in range(len(list_x)): list_x_r.append(((list_x[i] - min1) / length1)) list_y_r.append((list_y[i] - min2) / length2) list_z_r.append((list_z[i] - min3) / length3) # 匯出所需資料 with open('result.pcd', 'w') as f: # 設定檔案物件 # 寫入檔案頭 f.write('# .PCD v.7 - Point Cloud Data file format\n' 'VERSION .7\n' 'FIELDS x y z rgb\n' 'SIZE 4 4 4 4\n' 'TYPE F F F F\n' 'COUNT 1 1 1 1\n' 'WIDTH ' + str(len(list_x_r)) + '\n' 'HEIGHT 1\n' 'VIEWPOINT 0 0 0 1 0 0 0\n' 'POINTS ' + str(len(list_x_r)) + '\n' 'DATA ascii\n') # 寫入座標資料和顏色資料 for i in range(len(list_x_r)): stringr = str(list_x_r[i]) + ' ' + str(list_y_r[i]) + ' ' + str(list_z_r[i]) + ' ' + str(list_rgb[i]) +'\n' f.write(stringr)