欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

PIL、Numpy、OpenCV和Tensor格式的相互转换

人工智能 迷途小书童 3年前 (2022-09-27) 2153次浏览 0个评论

环境

  • python 3.8
  • pillow 9.2.0
  • opencv 4.6.0.66
  • torch 1.9.1
  • torchvision 0.10.1

简介

一般来说,我们进行图片的读写,用的是 pillowopencv 中的 APIpillow 读取的通道顺序是 RGB,而 opencv 的则是 BGRopencv 中进行图像处理的本质其实是 numpy.ndarray 的操作,而后在神经网络中,又引入了可以使用 gpu 加速计算的张量 tensor,它也是多维数组,本篇就来看看这几种数据格式的相互转换。

实操

直接看代码

  1. import cv2
  2. import numpy as np
  3. from PIL import Image
  4. import torch
  5. from torchvision import transforms
  6. # 测试图片
  7. img_path = 'C:\\Users\\Administrator\\lenna.png'
  8. # 返回值是 PIL.Image.Image 类型
  9. img_pil = Image.open(img_path)
  10. # pil 转换成 numpy.ndarray
  11. img_numpy = np.array(img_pil)
  12. # numpy.ndarray 转化成 pil
  13. img_pil = Image.fromarray(img_numpy)
  14. # pil 转换成 tensor
  15. transform = transforms.Compose([transforms.ToTensor()])
  16. img_tensor = transform(img_pil)
  17. # tensor 转换成 pil
  18. img_pil = transforms.ToPILImage()(img_tensor).convert('RGB')
  19. # pil 转换成 opencv
  20. img_cv = cv2.cvtColor(np.asarray(img_pil), cv2.COLOR_RGB2BGR)
  21. # opencv 转换成 pil,上面已经有了 pil 转其它格式的方法,那对应到 opencv 也是一样,就不往下继续写了
  22. img_pil = Image.fromarray(cv2.cvtColor(img_cv, cv2.COLOR_BGR2RGB))
  23. # tensor 转换成 numpy.ndarray
  24. img_numpy = img_tensor.numpy()
  25. # numpy.ndarray 转换成 tensor
  26. img_tensor = torch.from_numpy(img_numpy)

参考资料

喜欢 (0)

您必须 登录 才能发表评论!