import numpy as np import json import matplotlib.pyplot as plt def get_transform_matrix(json_file_path): """ 根据 file_path 从 JSON 文件中查找对应的 transform_matrix。 :param json_file_path: JSON 文件路径 :param target_file_path: 目标 file_path,用于匹配 :return: 4×4 transform_matrix (NumPy 数组) 或 None(如果未找到) """ # 读取 JSON 文件 # name_prefix = target_file_prefix + '_hdri' #光照不同不会影响相机参数,所以只取0 with open(json_file_path, "r") as f: data = json.load(f) # 遍历 JSON,查找目标 file_path 的 transform_matrix for frame_list in data["frames"]: return np.array(frame_list.get('transform_matrix')) # 遍历所有 HDRI 组 def blender_world_normal_2_opengl_camera(normals_world: np.ndarray, c2w: np.ndarray, visualization = False) -> np.ndarray: H, W, C = normals_world.shape if C == 4: normals_world = normals_world[..., :3] R_c2w = c2w[:3, :3] R_opencv = R_c2w.T transformed_normals = normals_world.reshape(-1, 3).T transformed_normals = R_opencv @ transformed_normals transformed_normals = transformed_normals.T transformed_normals = transformed_normals.reshape(H, W, 3) if visualization: plt.imshow(transformed_normals) plt.axis('off') plt.savefig('N_world.png',bbox_inches='tight', pad_inches=0) transformed_normals = transformed_normals * 0.5 + 0.5 plt.imshow(transformed_normals) plt.axis('off') plt.savefig('N_camera.png',bbox_inches='tight', pad_inches=0) return transformed_normals