Write UTF-8 image names intact in COLMAP binary models

This commit is contained in:
Afloat committed 2026-11-07 02:54:53 +08:00
1 parent 50e0e3c70c
commit 6e2c946e0c
2 files changed
+25 -2

No files matched your search

@@ -300,8 +300,7 @@ def write_images_binary(images, path_to_model_file):
write_next_bytes(fid, img.qvec.tolist(), "dddd")
write_next_bytes(fid, img.tvec.tolist(), "ddd")
write_next_bytes(fid, img.camera_id, "i")
for char in img.name:
write_next_bytes(fid, char.encode("utf-8"), "c")
fid.write(img.name.encode("utf-8"))
write_next_bytes(fid, b"\x00", "c")
write_next_bytes(fid, len(img.point3D_ids), "Q")
for xy, p3d_id in zip(img.xys, img.point3D_ids):
@@ -0,0 +1,24 @@
from pathlib import Path
import numpy as np
from nerfstudio.data.utils.colmap_parsing_utils import Image, read_images_binary, write_images_binary
def test_multibyte_image_name_roundtrip(tmp_path: Path):
image = Image(
id=7,
qvec=np.array([1, 0, 0, 0]),
tvec=np.zeros(3),
camera_id=3,
name="室内/café.png",
xys=np.array([[2.5, 1.0]]),
point3D_ids=np.array([17]),
)
path = tmp_path / "images.bin"
write_images_binary({image.id: image}, path)
restored = read_images_binary(path)[image.id]
assert restored.name == image.name
np.testing.assert_array_equal(restored.xys, image.xys)
np.testing.assert_array_equal(restored.point3D_ids, image.point3D_ids)