​pytorch中图片相关注意的问题

问题:

将数据集读取到网络中,进行训练(转为了tensor),最后想要转回原始图像,并对图片进行保存时,遇到了一些问题:

备注:形状为3,256,256的PyTorch张量,其中3是通道数,图像尺寸是256,浮点值。

image = image.squeeze(0)  # {1,3,256,256}->{3,256,256}
image = image.to("cpu").numpy().astype(np.uint8)  # tensor转numpy
image = Image.fromarray(image)  # numpy转PIL
image.convert('RGB')

报错:

在 “ image = Image.fromarray(image)  ”这里会报错:

  • TypeError: Cannot handle this data type: (1, 1, 256), |u1

解决:

image = image.squeeze(0)
image = (255* image).to("cpu").numpy().astype(np.uint8)
image = Image.fromarray(image.transpose(1, 2, 0))
image.convert('RGB')

需要注意的是:

  • 原始image数据经过预处理,会变成(3,256,256)的float32 [0,1]的numpy.

1、要注意维度顺序:PIL.Image希望其RGB图像的形状是hxwx3 -通道维度最后,而pytorch更喜欢将图像表示为3xhxw -通道维度。

所以需要进行:image = Image.fromarray(image.transpose(1, 2, 0))

2、image取值0-1,需要乘255变成彩色图

3、Image.fromarray() 不支持float32类型的数据,需要将类型转换为Image.fromarray() 支持的类型即可(转为uint8类型)



图片相关问题

判断灰度还是彩色图: 右击图片属性,摘要,点击详细属性,里面有位深度一项。

  • RGB图:位深度是24;
  • 灰度图:位深度是8(灰度是白灰黑表示的图,索引图有可能是彩色的,但也是8位深);
     

灰度图像和彩色图像区别:

  • 灰度图像:在每个像素点上只有一个分量,白色为255,黑色为0。像素值所需的数据长度有8 bit或10 bit两种,即图像的位深为8 bit或10 bit。
  • 彩色图像:以RGB格式的彩色图像为例,一幅完整的图像可以被分割为蓝(B分量)、绿(G分量)、红(R分量)三基色的单色图。例如图像深度为24,用R:G:B=8:8:8来表示色彩,则R、G、B各占用8位来表示各自基色分量的强度,每个基色分量的强度等级为2^8=256种。图像可容纳2^24=16M种色彩(24位色)。

PIL包中图像的mode参数:

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值