| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- import os
- import json
- import numpy as np
- import matplotlib.pyplot as plt
- import cv2
- from tifffile import tifffile
- def draw_lines_on_resized_tiff(json_path, tiff_dir, output_dir=None):
- with open(json_path, 'r', encoding='utf-8') as f:
- data = json.load(f)
- if output_dir:
- os.makedirs(output_dir, exist_ok=True)
- target_width, target_height = 826, 818 # 目标尺寸
- for item in data:
- original_img_name = item["image"]
- base_name = os.path.splitext(original_img_name)[0].replace("_color", "_depth")
- tiff_name = "filled_" + base_name + ".tiff"
- tiff_path = os.path.join(tiff_dir, tiff_name)
- if not os.path.exists(tiff_path):
- print(f"[!] TIFF file not found: {tiff_path}")
- continue
- tiff_np = tifffile.imread(tiff_path)
- orig_height, orig_width = tiff_np.shape[:2]
- resized_img = cv2.resize(tiff_np, (target_width, target_height), interpolation=cv2.INTER_LINEAR)
- fig, ax = plt.subplots(figsize=(target_width / 100, target_height / 100), dpi=100)
- if resized_img.ndim == 2:
- ax.imshow(resized_img, cmap='gray')
- else:
- ax.imshow(resized_img)
- scale_x = target_width / orig_width
- scale_y = target_height / orig_height
- for line in item["lines"]:
- start_2000 = np.array(line["start"])
- end_2000 = np.array(line["end"])
- scale_line_x = orig_width / 2000
- scale_line_y = orig_height / 2000
- start_orig = start_2000 * np.array([scale_line_x, scale_line_y])
- end_orig = end_2000 * np.array([scale_line_x, scale_line_y])
- start = start_orig * np.array([scale_x, scale_y])
- end = end_orig * np.array([scale_x, scale_y])
- x0, y0 = int(round(start[0])), int(round(start[1]))
- x1, y1 = int(round(end[0])), int(round(end[1]))
- x0 = np.clip(x0, 0, target_width - 1)
- y0 = np.clip(y0, 0, target_height - 1)
- x1 = np.clip(x1, 0, target_width - 1)
- y1 = np.clip(y1, 0, target_height - 1)
- val_start = resized_img[y0, x0]
- val_end = resized_img[y1, x1]
- ax.plot([x0, x1], [y0, y1], 'r-', linewidth=1)
- ax.scatter([x0, x1], [y0, y1], c='blue', s=10)
- ax.text(x0, y0, f"{val_start}", color='white', fontsize=8,
- bbox=dict(facecolor='black', alpha=0.5))
- ax.text(x1, y1, f"{val_end}", color='white', fontsize=8,
- bbox=dict(facecolor='black', alpha=0.5))
- ax.set_title(original_img_name)
- ax.axis('off')
- if output_dir:
- save_name = base_name + "_vis_resized.jpg"
- save_path = os.path.join(output_dir, save_name)
- plt.savefig(save_path, bbox_inches='tight', dpi=100)
- plt.close(fig)
- else:
- plt.show()
- print("✅ 所有图像处理完成。")
- if __name__ == '__main__':
- json_path = r"G:\python_ws_g\data\pcd2color_result\a_predict_restnet50\predictions.json"
- tiff_dir = r"G:\python_ws_g\data\pcd2color_result\dilated_tiff_filled"
- output_dir = r"G:\python_ws_g\data\pcd2color_result\line_vis_resized"
- draw_lines_on_resized_tiff(json_path, tiff_dir, output_dir)
|