├── 000002.bin ├── README.md ├── bin2pcd.py └── bin2pcd_folder.py /000002.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cuge1995/bin-to-pcd-python/e9c93e4c5b31153efe579d209a289caf38cc114a/000002.bin -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # bin-to-pcd-python 2 | Converting bin files scanned by LIDAR of autonomous vehicles into pcd files for further processing 3 | 4 | ## Requirements 5 | 6 | The code requires *open3d* 7 | 8 | ## convert `.bin` to `.pcd` 9 | 10 | usage: 11 | 12 | ```bash 13 | python bin2pcd.py binFileName, pcdFileName 14 | ``` 15 | 16 | for example: 17 | 18 | ```bash 19 | python bin2pcd.py 000002.bin 2.pcd 20 | ``` 21 | 22 | 23 | 24 | ## Dataset 25 | 26 | KITTI, Sementic3D 27 | -------------------------------------------------------------------------------- /bin2pcd.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import struct 3 | import sys 4 | import open3d as o3d 5 | 6 | 7 | def bin_to_pcd(binFileName): 8 | size_float = 4 9 | list_pcd = [] 10 | with open(binFileName, "rb") as f: 11 | byte = f.read(size_float * 4) 12 | while byte: 13 | x, y, z, intensity = struct.unpack("ffff", byte) 14 | list_pcd.append([x, y, z]) 15 | byte = f.read(size_float * 4) 16 | np_pcd = np.asarray(list_pcd) 17 | pcd = o3d.geometry.PointCloud() 18 | pcd.points = o3d.utility.Vector3dVector(np_pcd) 19 | return pcd 20 | 21 | def main(binFileName, pcdFileName): 22 | pcd = bin_to_pcd(binFileName) 23 | o3d.io.write_point_cloud(pcdFileName, pcd) 24 | 25 | if __name__ == "__main__": 26 | a = sys.argv[1] 27 | b = sys.argv[2] 28 | main(a, b) -------------------------------------------------------------------------------- /bin2pcd_folder.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import struct 3 | import os 4 | import sys 5 | import open3d as o3d 6 | 7 | 8 | def bin_to_pcd(binFileName): 9 | size_float = 4 10 | list_pcd = [] 11 | with open(binFileName, "rb") as f: 12 | byte = f.read(size_float * 4) 13 | while byte: 14 | x, y, z, intensity = struct.unpack("ffff", byte) 15 | list_pcd.append([x, y, z]) 16 | byte = f.read(size_float * 4) 17 | np_pcd = np.asarray(list_pcd) 18 | pcd = o3d.geometry.PointCloud() 19 | pcd.points = o3d.utility.Vector3dVector(np_pcd) 20 | return pcd 21 | 22 | 23 | def main(binFolderName, pcdFolderName): 24 | for i in os.listdir(binFolderName): 25 | if not i.startswith('.'): 26 | binFileName = binFolderName + '/' + i 27 | print(i) 28 | 29 | pcd = bin_to_pcd(binFileName) 30 | pcdFileName = pcdFolderName+i[:-4]+'.pcd' 31 | print(pcdFileName) 32 | o3d.io.write_point_cloud(pcdFileName, pcd) 33 | 34 | 35 | if __name__ == "__main__": 36 | a = sys.argv[1] 37 | b = sys.argv[2] 38 | main(a, b) 39 | --------------------------------------------------------------------------------