list-numpy-tensor-cv2-PIL 转换合集

2020/3/20

1. numpy & list

1.1 List -> numpy

import numpy as np
np_arr = np.array(li) 

1.2 numpy->List:

li = np_arr.tolist() 

2. numpy & tensor

  • 通过转换,Tensor和numpy是共享内存的。所以它们之间转换很快,而且几乎不会消耗资源。

2.1 numpy -> tensor

import numpy as np
import torch
tensor_arr = torch.from_numpy(np_arr)

2.2 tensor -> numpy

import numpy as np
import torch
np_arr = tensor_arr .numpy()

3. cv2(numpy) & PIL

3.1 PIL-> cv2

事实上是PIL->numpy

import cv2
from PIL import Image
import numpy
 
image = Image.open("plane.jpg")
image.show()
img = cv2.cvtColor(numpy.asarray(image), cv2.COLOR_RGB2BGR)
cv2.imshow("OpenCV",img)
cv2.waitKey()

3.2 cv2 -> PIL

事实上是numpy -> PIL

import cv2
from PIL import Image
import numpy
 
img = cv2.imread("plane.jpg")
cv2.imshow("OpenCV",img)
image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
image.show()
cv2.waitKey()

4. tensor&PIL

  • 借助torchvision的transforms来实现

4.1 PIL -> tensor

  • T.ToTensor可以把PIL Image转成Tensor,会自动将[0,255]归一化至[0,1]
  • 转换后的shape是(C, H, W)或者(H, W)
from torchvision import transforms as T
from PIL import Image
image = Image.open("xxx.jpg")
t = T.ToTensor()(image)
  • 如果不想归一到[0,1],可以采取迂回的方法:PIL->numpy-> tensor,此时返回的shape是(H, W, 3)
patch = torch.from_numpy(np.asarray(img1))

4.2 tensor-> PIL

  • 同理,tensor的shape应该是(C, H, W)或者(H, W)
  • tensor的范围可以是[0,255]或者[0,1],dtype相应必须为uint8或float32
from torchvision import transforms as T
img = T.ToPILImage(t)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容