Spaces:
Sleeping
Sleeping
| import itertools | |
| import sys | |
| sys.path.append("..") | |
| import numpy as np | |
| from pycolmap import Quaternion, SceneManager | |
| #------------------------------------------------------------------------------- | |
| def main(args): | |
| scene_manager = SceneManager(args.input_folder) | |
| scene_manager.load() | |
| with open(args.output_file, "w") as fid: | |
| fid.write("NVM_V3\n \n{:d}\n".format(len(scene_manager.images))) | |
| image_fmt_str = " {:.3f} " + 7 * "{:.7f} " | |
| for image_id, image in scene_manager.images.iteritems(): | |
| camera = scene_manager.cameras[image.camera_id] | |
| f = 0.5 * (camera.fx + camera.fy) | |
| fid.write(args.image_name_prefix + image.name) | |
| fid.write(image_fmt_str.format( | |
| *((f,) + tuple(image.q.q) + tuple(image.C())))) | |
| if camera.distortion_func is None: | |
| fid.write("0 0\n") | |
| else: | |
| fid.write("{:.7f} 0\n".format(-camera.k1)) | |
| image_id_to_idx = dict( | |
| (image_id, i) for i, image_id in enumerate(scene_manager.images)) | |
| fid.write("{:d}\n".format(len(scene_manager.points3D))) | |
| for i, point3D_id in enumerate(scene_manager.point3D_ids): | |
| fid.write( | |
| "{:.7f} {:.7f} {:.7f} ".format(*scene_manager.points3D[i])) | |
| fid.write( | |
| "{:d} {:d} {:d} ".format(*scene_manager.point3D_colors[i])) | |
| keypoints = [ | |
| (image_id_to_idx[image_id], kp_idx) + | |
| tuple(scene_manager.images[image_id].points2D[kp_idx]) | |
| for image_id, kp_idx in | |
| scene_manager.point3D_id_to_images[point3D_id]] | |
| fid.write("{:d}".format(len(keypoints))) | |
| fid.write( | |
| (len(keypoints) * " {:d} {:d} {:.3f} {:.3f}" + "\n").format( | |
| *itertools.chain(*keypoints))) | |
| #------------------------------------------------------------------------------- | |
| if __name__ == "__main__": | |
| import argparse | |
| parser = argparse.ArgumentParser( | |
| description="Save a COLMAP reconstruction in the NVM format " | |
| "(http://ccwu.me/vsfm/doc.html#nvm).", | |
| formatter_class=argparse.ArgumentDefaultsHelpFormatter) | |
| parser.add_argument("input_folder") | |
| parser.add_argument("output_file") | |
| parser.add_argument("--image_name_prefix", type=str, default="", | |
| help="prefix image names with this string (e.g., 'images/')") | |
| args = parser.parse_args() | |
| main(args) | |