美文网首页
list-numpy-tensor-cv2-PIL 转换合集

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

作者: winter_sweetie | 来源:发表于2020-03-20 01:10 被阅读0次

    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)
    

    相关文章

      网友评论

          本文标题:list-numpy-tensor-cv2-PIL 转换合集

          本文链接:https://www.haomeiwen.com/subject/ajqdyhtx.html