fix(process_data): handle numpy array in write_points3D_binary error field

`read_points3D_binary` stores `error` as a numpy array, but
`write_points3D_binary` passed it directly to `struct.pack("<d", ...)`,
which fails on numpy 2.x because 1-d arrays are no longer auto-coerced
to Python scalars.  Wrap `pt.error.item()` in `float()` for robust
extraction—this matches the existing convention in
`write_cameras_binary` (line 184: `float(p)`).

Fixes a pre-existing test failure on CI where
`test_process_images_skip_colmap` and
`test_process_images_recursively_skip_colmap` crashed with
`struct.error: required argument is not a float`.
This commit is contained in:
wyyyz1937365497 committed 2026-08-01 14:11:45 +08:00
1 parent 8709e2d857
commit 98e6b30e29
1 file changed
+1 -1
@@ -399,7 +399,7 @@ def write_points3D_binary(points3D, path_to_model_file):
write_next_bytes(fid, pt.id, "Q")
write_next_bytes(fid, pt.xyz.tolist(), "ddd")
write_next_bytes(fid, pt.rgb.tolist(), "BBB")
write_next_bytes(fid, pt.error, "d")
write_next_bytes(fid, float(pt.error.item()), "d")
track_length = pt.image_ids.shape[0]
write_next_bytes(fid, track_length, "Q")
for image_id, point2D_id in zip(pt.image_ids, pt.point2D_idxs):