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
- cv2和PIL.Image的轉換其實是numpy.array和PIL的轉換
- 注意,PIL.Image和plt.imshow的格式都是rgb,而cv2是bgr,所以要做格式轉換
- 代碼:credit to https://blog.csdn.net/dcrmg/article/details/78147219
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)