Image\Numpy\Tensor互相转化

一、代码

from PIL import Image
from torchvision.transforms import Compose, Resize, ToTensor, Normalize


def numpy2pil(img_numpy):
    return Image.fromarray(img_numpy)

def pil2numpy(img_pil):
    return np.asarray(img_pil)

def tensor2numpy(tensor):
    # 将 Tensor 转换为 NumPy 数组
    # .detach() 方法用于创建一个新的张量(Tensor),这个新张量与原始张量共享数据,但不再需要计算梯度。
    numpy_arr = tensor.squeeze().permute(1, 2, 0).detach().cpu().numpy() * 255
    print(f"NumPy 数组形状: {numpy_arr.shape}")
    return numpy_arr

def img2input(img):
    # 定义转换
    transform = Compose([
        Resize((224, 224)),   # 调整大小到 (224, 224)
        ToTensor(),           # 转换为 Tensor,范围 [0, 1]
        Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])  # 标准化 RGB 图像
    ])
    # 应用转换,得到 Tensor
    tensor = transform(img) # shape: [3, 224, 224]
    print(f"转换后的 Tensor 形状: {tensor.shape}")
    # 调整 Tensor 的形状为 (1, 3, 224, 224) 以匹配模型输入
    input_tensor = tensor.unsqueeze(0) # 在第0维增加一维,batch size 为 1
    print(f"调整后的 Tensor 形状: {input_tensor.shape}")
    return input_tensor

def main():
    img = Image.open('https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg')
    print(img.size, img.mode)
    tensor = img2input(img)
    numpy_arr = tensor2numpy(tensor)

if __name__ == '__main__':
    main()

二、结果

转换后的 Tensor 形状: torch.Size([3, 224, 224])
调整后的 Tensor 形状: torch.Size([1, 3, 224, 224])
NumPy 数组形状: (224, 224, 3)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值