PIL,cv2读取类型及 numpy,tensor格式转换

22 篇文章 1 订阅

PIL读取图片格式以及数据转换操作

PIL库读取的图片格式是 H x W x C 格式的。比如一张图是128x128x3,图片格式PIL.PngImagePlugin.PngImageFile。
通过numpy.array(img)或者numpy.asarray(img),转化为uint8的数值数组形式,数值范围在0-255之间。两个函数的区别在于array函数会copy一个新的副本,占用新的空间,asarray不会。

import numpy as np
from PIL import Image
img = Image.open(path)
img = np.array(img)  # img是数值范围在0-255之间的uint8格式数组
# 注意img的形状是 H x W x C
# 如果想改变数组形状,可以使用transpose(idx1, idx2, idx3)

2.转换为tensor形式:

在Pytorch中,图片张量形式是 C x H x W,所以要把数组转置转置,用到transpose

import torch
from torchvision import transforms

# 1.
img = np.array(img).transpose(2, 0, 1)  # 表示C x H x W
img1 = torch.tensor(img / 255)  # 神经网络里的张量数值一般在0-1之间归一化处理,所以除以255
# 此时获得的数组就是形状为C x H x W的张量,数值0-1
# dtype=torch.float64

# 2.
# 或者经过transforms处理
trans = transforms.Compose([
	transforms.ToTensor()
])
img2 = trans(img)  # 自动转化为形状CxHxW的张量形式

3.由tensor转换为图片

经过tensor的处理过程之后,要将tensor形式转换为图片。
用到numpy()函数,fromarray()函数。uint8函数

 # 这里将tensor形式用numpy()函数转为数组形式,
 # 并且用transpose将数组转置为PIL能够处理的WxHxC形式。
nimg = img.numpy().transpose(1,2,0)
img = nimg * 255 # 将原来tensor里0-1的数值乘以255,以便转为uint8数据形式,uint8是图片的数值形式。
#那么此时img就是原料,通过两种方式将img化为图片
# 第一种
Image.fromarray(np.uint8(img)) # eg1
# 第二种
Image.fromarray(img.astype(np.uint8))#eg2

or 使用

transforms中有直接将tensor转换成pil文件的,
transforms.ToPILImage

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用以下代码将 PyTorch 中的 Tensor 转换NumPy 数组: ``` import numpy as np import torch tensor = torch.randn((3, 4)) # 创建一个大小为 3x4 的张量 numpy_array = tensor.numpy() # 将张量转换NumPy 数组 ``` 要将 NumPy 数组转换为 PyTorch 中的 Tensor,可以使用以下代码: ``` import numpy as np import torch numpy_array = np.random.rand(3, 4) # 创建一个大小为 3x4 的 NumPy 数组 tensor = torch.from_numpy(numpy_array) # 将 NumPy 数组转换为张量 ``` 要将 PyTorch 中的 Tensor 转换为 OpenCV 中的图像,可以使用以下代码: ``` import cv2 import torch tensor = torch.randn((3, 256, 256)) # 创建一个大小为 3x256x256 的张量 image = tensor.permute(1, 2, 0).numpy() # 将张量转换NumPy 数组,并将通道顺序从 CxHxW 转换为 HxWxC cv2.imshow("Image", image) # 显示图像 cv2.waitKey() # 等待关闭窗口 ``` 要将 OpenCV 中的图像转换为 PyTorch 中的 Tensor,可以使用以下代码: ``` import cv2 import torch image = cv2.imread("image.png") # 读取图像文件 tensor = torch.from_numpy(image.transpose((2, 0, 1))) # 将图像转换为张量,并将通道顺序从 HxWxC 转换为 CxHxW ``` 要将 PyTorch 中的 Tensor 转换Pillow 中的图像,可以使用以下代码: ``` from PIL import Image import torch tensor = torch.randn((3, 256, 256)) # 创建一个大小为 3x256x256 的张量 image = tensor.permute(1, 2, 0).numpy() # 将张量转换NumPy 数组,并将通道顺序从 CxHxW 转换为 HxWxC pil_image = Image.fromarray((image * 255).astype('uint8')) # 将 NumPy 数组转换PIL 图像 pil_image.show() # 显示图像 ``` 要将 Pillow 中的图像转换为 PyTorch 中的 Tensor,可以使用以下代码: ``` from PIL import Image import numpy as np import torch pil_image = Image.open("image.png") # 打开图像文件 numpy_array = np.array(pil_image) / 255.0 # 将 PIL 图像转换NumPy 数组,并将像素值转换为 0 到 1 之间的浮点数 tensor = torch.from_numpy(numpy_array.transpose((2, 0, 1))) # 将 NumPy 数组转换为张量,并将通道顺序从 HxWxC 转换为 CxHxW ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值