ValueError: mode mismatch

项目场景:PIL库Image模块处理数组合并成3通道RGB图像

项目中,使用Pytorch的torch.utils.data.DataLoader加载自己准备好的数据集。同时想要直观查看或验证生成的数据是否正确。通过直观展示数据–训练数据和标签–来验证数据集。

自定义的数据集是使用PIL库的Image.open读取的图像数据。还是用它来展示验证数据。测试代码如下:

if __name__ == "__main__":
    import time
    from PIL import Image

    playPhoneData = PlayPhoneData("E:/Datasets/玩手机")
    # 利用dataloader加载数据集
    train_loader = torch.utils.data.DataLoader(playPhoneData, batch_size=1, shuffle=True, drop_last=True)

	# 展示和验证数据
    for i, (inputs, labels) in enumerate(train_loader, 0):
        print(i, inputs[0].shape, labels)
        # array = inputs[0]
        im1 = Image.fromarray(256 * inputs[0][0].numpy())
        im2 = Image.fromarray(256 * inputs[0][1].numpy())
        im3 = Image.fromarray(256 * inputs[0][2].numpy())
        im = Image.merge("RGB", [im1, im2, im3])
        im.show("i")
        break

问题描述:ValueError: mode mismatch

代码中:im1 = Image.fromarray(256 * inputs[0][0].numpy())inputs是数据集1个batch的图像。inputs[0]表示batch中取第一副图像。inputs[0][0]表示该图像的一个通道。.numpy()是将tensor转换成数组。256 *是因为生成图像数据集石对图像做了归一化处理,需要还原。
im1,im2,im3分别表示3个通道,通过merge函数将他们还原成3通道彩色图像。运行时,报错分析:

  1. 首先,每一个通道单独展示正常。
  2. 合并数据时会报错,ValueError: mode mismatch,或者数组数据没有model属性。
    在这里插入图片描述

原因分析:

转化的im1,im2,im33个通道数组没有定义图像模式,需要明确定义model.需要im1,im2,im3调用convert设置图像模式。


解决方案:

使用im1.convert('L')定义图像模式。

im1 = Image.fromarray(256 * inputs[0][0].numpy()).convert('L')
im2 = Image.fromarray(256 * inputs[0][1].numpy()).convert('L')
im3 = Image.fromarray(256 * inputs[0][2].numpy()).convert('L')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柏常青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值