refer to code:
.
from PIL import Image
import json
import yaml
import os
import argparse
def get_image_dimensions(image_path):
with Image.open(image_path) as img:
return img.size
def convert_yaml_to_opensfm_json(yaml_file, json_file, image_path):
image_width, image_height = get_image_dimensions(image_path)
with open(yaml_file, 'r') as f:
calibration_data = yaml.safe_load(f)
# Extract the camera matrix and distortion coefficients
camera_matrix = calibration_data['camera_matrix']
dist_coeff = calibration_data['dist_coeff']
# Compute the normalized focal length
focal_normalized = camera_matrix[0][0] / image_width
# Prepare the JSON data
json_data = {
f"custom_camera {image_width} {image_height} perspective 0.0": {
"projection_type": "perspective",
"width": image_width,
"height": image_height,
"focal": focal_normalized,
"k1": dist_coeff[0][0],
"k2": dist_coeff[0][1]
}
}
# Write the JSON data to file
with open(json_file, 'w') as f:
json.dump(json_data, f, indent=4)
def main():
yaml_file="calibration.yaml"
json_file="./camera_models.json"
image_path="IMG_5306.JPG"
convert_yaml_to_opensfm_json(yaml_file, json_file, image_path)
if __name__ == '__main__':
main()
..
reference :
https://github.com/mapillary/OpenSfM/issues/95
https://opensfm.org/docs/geometry.html#camera-models
Thank you.
www.marearts.com
๐๐ป♂️
No comments:
Post a Comment