PIL加载JPG图片可正常显示,但转数组/张量后数值异常
问题分析与解决方案
核心问题1:图片为索引色彩模式(P模式)
你看到的numpy数组小数值(0-4)是调色板的索引值,而非实际RGB像素值。Image.show()会自动加载调色板显示正常图像,但直接转数组时只会提取索引,导致数值异常;PilToTensor()处理索引模式时也会出现解析错误,输出全0张量。
核心问题2:路径转义隐患
你的路径使用f-string和单个反斜杠,虽然当前Image.open()能打开,但存在转义风险(比如\d在部分场景会被错误解析),可能导致后续路径问题。
修复步骤:
修正路径写法
使用原始字符串避免转义问题,任选一种写法:# 原始字符串(推荐) image_path = r"D:\datasets\dataset_game_objects\1.jpg" # 正斜杠(跨平台兼容) image_path = "D:/datasets/dataset_game_objects/1.jpg" # 双反斜杠 image_path = "D:\\datasets\\dataset_game_objects\\1.jpg"转换图片为RGB模式
在打开图片后立即转换为RGB模式,确保提取的是实际像素值:import numpy as np from PIL import Image from torchvision.transforms import PilToTensor # 修正后的路径 image_path = r"D:\datasets\dataset_game_objects\1.jpg" image = Image.open(image_path) # 可选:检查当前模式,确认是否为P模式 print(f"图片模式:{image.mode}") # 转换为RGB模式 image_rgb = image.convert('RGB') # 转numpy数组 image_array = np.array(image_rgb) print(image_array) # 转张量 tensor = PilToTensor()(image_rgb) print(tensor)验证结果
转换后numpy数组会显示0-255的正常RGB数值,张量也会对应正确的像素值,而非全0。
内容的提问来源于stack exchange,提问作者IEatGemstones
相关产品推荐
相关产品推荐

