pytorch可视化预处理的结果,附带张量转img的函数

    技术2026-01-27  10

    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“

    Processed: 0.038, SQL: 9