如何将numpy格式图片转换为带对应标签命名的JPG图片并分类存储
实现方案
环境依赖
先安装需要的第三方库:
pip install numpy pillow
完整实现代码
import os import numpy as np from PIL import Image # 1. 加载npy文件 images = np.load("images.npy") labels = np.load("labels.npy") # 2. 初始化根目录和标签计数器 root_dir = "images" label_counter = {} # 3. 遍历所有图片和对应标签 for img, label in zip(images, labels): # 处理标签字符串,确保是合法目录名 label = str(label).strip() # 生成标签对应的子目录路径 label_dir = os.path.join(root_dir, label) # 目录不存在就创建 os.makedirs(label_dir, exist_ok=True) # 维护每个标签的图片计数,用于命名 if label not in label_counter: label_counter[label] = 0 label_counter[label] += 1 # 处理图片像素:如果是归一化到0~1的浮点值,先转成0~255的uint8 if img.dtype == np.float32 or img.dtype == np.float64: img = (img * 255).astype(np.uint8) # 转成PIL Image对象,单通道灰度图把mode改成'L'即可 # 如果图片是CHW格式(通道在前),先转成HWC:img = np.transpose(img, (1,2,0)) pil_img = Image.fromarray(img, mode="RGB") # 生成文件名和存储路径 file_name = f"{label}{label_counter[label]}.jpg" save_path = os.path.join(label_dir, file_name) pil_img.save(save_path) print(f"处理完成,共导出{len(images)}张图片")
常见适配调整
- 如果你的图片是单通道灰度图,修改
Image.fromarray的mode参数为'L' - 如果你的numpy数组存储格式是
(样本数, 通道数, 高度, 宽度)的CHW格式,在转PIL前添加img = np.transpose(img, (1,2,0))调整维度顺序 - 如果导出的图片颜色异常,检查通道顺序是不是BGR,如果是可以用
img = img[..., ::-1]转成RGB格式
内容的提问来源于stack exchange,提问作者ethan meem
相关产品推荐
相关产品推荐

