torchvision.transforms.Compose输入类型是?处理过程中的数据类型转化又是什么样的呢?

1 输入数据的类型

这个输入类型很容易被人忽略且搞错,ToTensor这种操作的输入可以是numpy也可以是PIL.Image,但是其它与图片处理相关的操作比如旋转剪切的输入都需要是PIL.Image类型. PIL. Image.open的输出类型实际上是:
在这里插入图片描述在这里插入图片描述
转化为RGB之后才是通常意义上的PIL. Image图片类型。

2 PIL.Image.open读取的结果

PIL.Image.open函数读取的结果可以通过np.array或者np.asarray直接转化成矩阵类型。如果原图本身就是RGB图,那么转化得到的numpy矩阵就是三维的,且通道数是最后一个维度;如果原图本身就是灰度图,那么转化得到的numpy矩阵就是二维的,而convert(“RGB”)后的数据转化为numpy时则是三维的了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
注意事项:
虽然PIL.Image.Image没有shape属性,但是其是具有size属性的,而且可以发现对于灰度图,即便是convert(“RGB”)了其size仍然是保持二维的,只有转化成numpy之后才变成三维的,为什么呢?继续往下看,可以发现即便输入是RGB彩色图,其size也是二维的。**
所以不妨可以这样理解,PIL.Image.Image的size只关注图片的宽度和高度,而不关注通道数,通道数应该由其他的属性来参与控制。
在这里插入图片描述
在这里插入图片描述

3 额外补充

【1】torchvision.transforms.Compose中只有遇到了toTensor操作之后输出结果才会变成Tensor类型,在没有遇到该操作之前的所有输出依旧是保持PIL.Image.Image数据类型。
【2】cv2.Canny函数无论输入是二维的灰度numpy数组还是三维的RGBnumpy数组,其输出都是二维的numpy.
【3】Image.fromarray是有一个mode参数的,用来决定以何种方式来读取这个numpy数组。L代表以灰度方式进行读取,RGB代表以彩色方式进行读取,没有指定时会依据数据类型推断出来。PIL.Image.Image类型有get_pixel方法来获取指定几何位置的像素值。Image.fromarray传递的numpy矩阵必须是uint8类型,否则报错,x = x.astype(np.uint8).
在这里插入图片描述
【4】所有继承torch.utils.data.Dataset的数据集子类其__getitem__(self, i)的返回值中不能包含None类型的数据。
在这里插入图片描述
【5】https://pytorch.org/vision/main/generated/torchvision.transforms.Grayscale.html
GrayScale的转化不会将PIL.Image转化成Tensor,输出类型还是PIL.Image,并且也不会归一化,也不会进行阈值化(即把图片变成只有0和255的这两种灰度值)。
【6】ToTensor是将(H, W, C)转化为(C, H, W),注意H和W的相对顺序是没有发生改变的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值