import matplotlib.pyplot as plt
import numpy as np
import torchvision.transforms as T
from PIL import Image
img = Image.open('0703.jpg')
plt.imshow(np.array(img))
plt.savefig("原图.png")
plt.show()
# 原图-82
# transform = T.Resize((82,82))
# result = transform(img)
# img = plt.imshow(np.array(result))
# plt.savefig("82X82.png")
# plt.show()
# 82-裁剪
# transform = T.Compose([T.Resize((82,82)),
# T.RandomCrop((64,64))
# ])
# result = transform(img)
# img1 = plt.imshow(np.array(result))
# plt.savefig("裁剪.png")
# plt.show()
# 旋转15度
# transform = T.Compose([T.Resize((82,82)),
# T.RandomRotation(15)
# ])
# result = transform(img)
# img1 = plt.imshow(np.array(result))
# plt.savefig("旋转.png")
# plt.show()
# 遮挡
# transform = T.Compose([T.Resize((82,82)),
# T.ToTensor(),
# T.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)
# ])
# result = transform(img)
# img1 = plt.imshow(result.permute(1,2,0).numpy())
# plt.savefig("遮挡.png")
# plt.show()
"""
正常张量转PIL
"""
def tensor2img(ts):
array = np.array(ts)
if ts.ndim==4:
imgs = [array[i] for i in range(array.shape[0])]
else:
raise ValueError("没有批次维度")
for item in imgs: # item代表直接读取没有批次的剩下三维==通道数长宽
img = np.transpose(item,(1,2,0))*256 # 长宽通道数
img = img.astype(np.int)
plt.imshow(img)
plt.savefig()
plt.show()
"""
为下面量身定做的转PIL
"""
def T2I(ts):
array = np.array(ts)
img = np.transpose(array, (1, 2, 0)) * 256 # 长宽通道数
img = img.astype(np.int)
plt.imshow(img)
plt.savefig("裁剪,补零,垂直翻转,旋转.png")
plt.show()
# 一起操作
transform = T.Compose([
T.Resize((32,32)),
T.RandomCrop(32),
T.Pad(4),
T.RandomVerticalFlip(),
T.RandomRotation(10),
T.ToTensor(), # 转成张量
# T.Normalize()
])
result = transform(img)
img= T2I(result) # 再转成可以可视化的图片
# img1 = plt.imshow(np.array(result))
# plt.savefig("裁剪,补零,垂直翻转,旋转.png")
# plt.show()
如果没有在transform里转成张量,就不用调用张量转PIL,后面注释掉的还要。代码是一块一块进行的。
“squeezenet“