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
- 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来实现
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)