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是共享內存的。所以它們之間轉換很快,而且?guī)缀醪粫馁Y源。

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來實現(xiàn)

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)
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容