|
import sys |
|
sys.path.append("..") |
|
|
|
import numpy as np |
|
|
|
from pycolmap import SceneManager |
|
|
|
|
|
|
|
|
|
def main(args): |
|
scene_manager = SceneManager(args.input_folder) |
|
scene_manager.load_cameras() |
|
scene_manager.load_images() |
|
|
|
if args.sort: |
|
images = sorted( |
|
scene_manager.images.itervalues(), key=lambda im: im.name) |
|
else: |
|
images = scene_manager.images.values() |
|
|
|
fid = open(args.output_file, "w") |
|
fid_filenames = open(args.output_file + ".list.txt", "w") |
|
|
|
print>>fid, "# Bundle file v0.3" |
|
print>>fid, len(images), 0 |
|
|
|
for image in images: |
|
print>>fid_filenames, image.name |
|
camera = scene_manager.cameras[image.camera_id] |
|
print>>fid, 0.5 * (camera.fx + camera.fy), 0, 0 |
|
R, t = image.R(), image.t |
|
print>>fid, R[0, 0], R[0, 1], R[0, 2] |
|
print>>fid, -R[1, 0], -R[1, 1], -R[1, 2] |
|
print>>fid, -R[2, 0], -R[2, 1], -R[2, 2] |
|
print>>fid, t[0], -t[1], -t[2] |
|
|
|
fid.close() |
|
fid_filenames.close() |
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
import argparse |
|
|
|
parser = argparse.ArgumentParser( |
|
description="Saves the camera positions in the Bundler format. Note " |
|
"that 3D points are not saved.", |
|
formatter_class=argparse.ArgumentDefaultsHelpFormatter) |
|
|
|
parser.add_argument("input_folder") |
|
parser.add_argument("output_file") |
|
|
|
parser.add_argument("--sort", default=False, action="store_true", |
|
help="sort the images by their filename") |
|
|
|
args = parser.parse_args() |
|
|
|
main(args) |
|
|