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

TensorFlow加载文件夹图像数据集后PIL显示失真噪声问题

问题根源

你遇到的噪声类扭曲核心原因是数据类型不匹配,附带的比例变形是强制resize的逻辑问题:

  • tf.keras.utils.image_dataset_from_directory默认输出float32类型的张量,虽然像素值落在0-255区间,但PIL的Image.fromarray在RGB模式下要求输入必须是uint8类型的0-255整数数组,直接传入浮点型数组会被PIL错误解析像素值,最终呈现类似随机噪声的效果。
  • 你设置的image_size=(1080,1920)默认会对所有图像做无差别拉伸缩放,不会保留原始宽高比,你数据集里存在(1920,1080,3)的横版图像,被强行拉成竖版尺寸本身就会出现比例扭曲,但这不会造成噪声效果。
修复方法
  • 展示图像前先把数组转成uint8类型即可解决噪声问题:
for image, labels in images.take(1):
    img = image[0].numpy().astype('uint8') # 转为PIL兼容的uint8整数格式
    print(img.shape)
    img = Image.fromarray(img, 'RGB')
    img.save('my.png')
    img.show()
  • 如果要避免不同比例图像被拉伸变形,给加载函数加crop_to_aspect_ratio=True参数,加载时会自动按目标比例裁剪图像,而非强行拉伸:
images = image_dataset_from_directory('../dataset/',
                                      shuffle=True,
                                      batch_size=32,
                                      image_size=(1080,1920),
                                      crop_to_aspect_ratio=True)

注:如果后续做模型训练需要把像素归一化到0~1区间,再转float32除以255即可,仅在调用PIL展示/保存图像时做uint8转换就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:31:11