You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用skimage加载同文件夹下的jpg与png格式图像数据

单目录下分格式加载图像数据集实现

参考原始示例代码

seed = 42
np.random.seed = seed

Img_Width=128
Img_Height=128
Img_Channel = 3

Train_Path = 'stage1_train/'
Test_Path = 'stage1_test/'
train_ids = next(os.walk(Train_Path))[1] 
test_ids = next(os.walk(Test_Path))[1]
print(train_ids)

X_train = np.zeros((len(train_ids), Img_Height, Img_Width, Img_Channel),dtype=np.uint8)
Y_train = np.zeros((len(train_ids),Img_Height, Img_Width, 1), dtype=bool)

问题背景

以上为参考示例代码,需求为基于该代码逻辑加载自有数据集:

  • 所有图像存储在单个文件夹下,无嵌套子目录,路径为F:\segmentation\ISBI2016_ISIC_Part3B_Training_Data\ISBI2016_ISIC_Part3B_Training_Data_1
  • 文件夹内同时存在.jpg、.png两种格式文件,需要将两类图像分别加载到两个独立变量中
  • Python代码文件存放在F:\segmentation路径下

实现代码

原示例用os.walk取子文件夹列表的逻辑不适用单目录场景,直接扫描目标目录下的指定后缀文件即可,代码如下:

import os
import numpy as np
import cv2

# 固定随机种子
seed = 42
np.random.seed(seed)

# 统一输入图像尺寸
Img_Width = 128
Img_Height = 128
Img_Channel = 3

# 数据集路径,代码在segmentation目录下,优先用相对路径,路径前加r避免Windows反斜杠转义
DATA_PATH = r'ISBI2016_ISIC_Part3B_Training_Data\ISBI2016_ISIC_Part3B_Training_Data_1'
# 若相对路径识别失败,可替换为绝对路径:r'F:\segmentation\ISBI2016_ISIC_Part3B_Training_Data\ISBI2016_ISIC_Part3B_Training_Data_1'

# 分别筛选目录下的jpg、png文件,兼容后缀大写的情况
jpg_file_list = [f for f in os.listdir(DATA_PATH) if f.lower().endswith('.jpg')]
png_file_list = [f for f in os.listdir(DATA_PATH) if f.lower().endswith('.png')]
print(f"检测到jpg文件{len(jpg_file_list)}个,png文件{len(png_file_list)}个")

# 初始化存储数组,和原示例数据类型、维度保持一致
# 通常jpg为3通道原图,存入X_train;png为单通道分割掩码,存入Y_train
X_train = np.zeros((len(jpg_file_list), Img_Height, Img_Width, Img_Channel), dtype=np.uint8)
Y_train = np.zeros((len(png_file_list), Img_Height, Img_Width, 1), dtype=bool)

# 逐张加载jpg原图
for i, file_name in enumerate(jpg_file_list):
    img_full_path = os.path.join(DATA_PATH, file_name)
    # OpenCV默认读取为BGR通道,转为常规RGB顺序
    img = cv2.imread(img_full_path)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    # resize到统一尺寸
    img = cv2.resize(img, (Img_Width, Img_Height))
    X_train[i] = img

# 逐张加载png掩码
for i, file_name in enumerate(png_file_list):
    mask_full_path = os.path.join(DATA_PATH, file_name)
    # 掩码直接读取为灰度图
    mask = cv2.imread(mask_full_path, cv2.IMREAD_GRAYSCALE)
    mask = cv2.resize(mask, (Img_Width, Img_Height))
    # 灰度值二值化转为布尔类型,阈值可根据实际掩码调整
    mask = mask > 127
    # 增加通道维度,和原示例Y_train的维度对齐
    Y_train[i] = mask[:, :, np.newaxis]

重要注意事项:如果两类文件是一一对应的原图-掩码配对(同名不同后缀),不要分开遍历两个列表加载,否则容易因为文件名排序问题导致原图和掩码错位。需要按文件名配对后加载,核心逻辑如下:

# 按jpg文件名匹配同名png
for i, jpg_name in enumerate(jpg_file_list):
    file_base_name = os.path.splitext(jpg_name)[0]
    matched_png_name = f"{file_base_name}.png"
    if matched_png_name not in png_file_list:
        print(f"跳过:{jpg_name}未找到对应png掩码")
        continue
    # 读取、处理原图和掩码的逻辑和前述代码一致

内容的提问来源于stack exchange,提问作者Tareq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:01:04