@senspond

>

빅데이터/AI 🍎>데이터 사이언스

PIL이미지 <-> numpy, tensor 상호변환, matplotlib 로 이미지시각화 방법 정리

등록일시 : 2024-03-20 (수) 12:59
업데이트 : 2024-03-20 (수) 12:59
오늘 조회수 : 5
총 조회수 : 674

    PIL이미지 <-> numpy, tensor 상호변환, matplotlib 로 이미지시각화 방법 정리를 해본 글입니다

    PIL이미지 <-> numpy, tensor 상호변환, matplotlib 로 이미지시각화 방법 정리를 해본 글입니다


    PIL 이미지 데이터 불러오기

    from PIL import Image
    img = Image.open("./cat_dog_images/cat-01.jpg")
    #img.show()

    PIL Image.open 으로 이미지 데이터를 불러 올 수가 있습니다.



    PIL 이미지 <-> 넘파이


    PIL 이미지 to 넘파이 배열

    img_np = np.array(img)
    print(img_np)


    넘파이 배열 to PIL 이미지

    img_2 = Image.fromarray(img_np) # NumPy array to PIL image
    img_2.show()


    이미지 matplotlib로 시각화

    pyplot 의 imshow 는 PIL 이미지 데이터 또는 (0~255) 범위 값들로 구성된 numpy 배열 형태로도 받을 수가 있습니다.


    • 예시1

    import matplotlib.pyplot as plt 
    from PIL import Image
    
    img = Image.open("./cat_dog_images/cat-01.jpg")
    plt.imshow(img)
    plt.show()
    • 예시2

    import matplotlib.pyplot as plt 
    from PIL import Image
    
    img = Image.open("./cat_dog_images/cat-01.jpg")
    img_np = np.array(img)
    
    plt.imshow(img_np)
    plt.show()

    여기서 이미지 넘파이 배열은 0~255 범위 값을 가져야 합니다.




    파이토치


    PIL 이미지 to 텐서

    import torchvision.transforms as transforms
    from PIL import Image
    img = Image.open("./cat_dog_images/cat-01.jpg")
    
    transform = transforms.Compose([
      transforms.ToTensor(),      
      #transforms.Resize((80,120))
    ])
    t_img = transform(img)
    t_img

    ToTensor() 외 다른 Normalize()를 적용하지 않은 경우 정규화(Normalize) 한 결과가 0 ~ 1 범위로 변환됩니다


    텐서 to PIL 이미지

    tensor_PIL = transforms.ToPILImage()
    image = tensor_PIL(t_img)
    print(type(image)) # <class 'PIL.Image.Image'>
    # image.show()

    파이토치 torchvision.transforms 모듈의 ToPILImage() 메소드를 통해 간단하게 PIL 이미지 형태로 변환이 가능합니다.


    이미지 matplotlib로 시각화


    • 예시1

    tensor_PIL = transforms.ToPILImage()
    image = tensor_PIL(t_img)
    print(type(image))  # <class 'PIL.Image.Image'>
    plt.imshow(image)
    plt.show()


    • 예시2

    image = t_img.numpy().transpose((1,2,0))
    image = (image*255).astype(np.uint8)
    
    print(type(image)) # <class 'numpy.ndarray'>
    plt.imshow(image)
    plt.show()

    ToTensor() 로 0~1 사이의 부동소수점으로 정규화 되었기 때문에, 0~255 사이의 정수형 형태를 가지는 넘파이 배열로 변환한 후 imshow() 에 집어넣는 방법입니다. 만약 기본 ToTensor() 외에 별도의 정규화를 사용해서 tensor로 변환했다면 그 형식에 맞도록 역 변환 해줘야 합니다.






    senspond

    안녕하세요. Red, Green, Blue 가 만나 새로운 세상을 만들어 나가겠다는 이상을 가진 개발자의 개인공간입니다.

    댓글 ( 0 )

    카테고리내 관련 게시글

    현재글에서 작성자가 발행한 같은 카테고리내 이전, 다음 글들을 보여줍니다

    @senspond

    >

    빅데이터/AI 🍎>데이터 사이언스

    • 윈도우 환경에서 머신러닝/딥러닝 개발을 위한 파이썬 개발환경 구성하기

      윈도우 환경에서 머신러닝/딥러닝 개발을 위한 파이썬 개발환경 구성하기입니다.
        2024-03-18 (월) 01:28
      1. 파이썬으로 퍼셉트론(Perceptron) 구현하기

        원시적인 퍼셉트론(Perceptron)은 입력데이터를 2개의 클래스 중 하나로 분류하는 모델로 고전적인 선형 분류 모델입니다. 인공 신경망의 레이어를 구성하는 가장 기초적인 토대가 된다고 할 수 있습니다.
          2024-03-09 (토) 12:20
        1. [현재글] PIL이미지 <-> numpy, tensor 상호변환, matplotlib 로 이미지시각화 방법 정리

          PIL이미지 <-> numpy, tensor 상호변환, matplotlib 로 이미지시각화 방법 정리를 해본 글입니다
            2024-03-20 (수) 12:59
          1. 파이토치(torch) 기본 함수와 Tensor 클래스의 메소드 정리

            파이토치(torch) 기본 함수와 Tensor 클래스의 메소드들을 정리해 본 글입니다. 워낙 종류가 많아서 전부 다 정리할 수는 없지만 자주 사용하는 것들을 추려서 정리해봤습니다.
              2024-03-21 (목) 01:17
            1. 윈도우 환경에서 WSL로 Tensorflow GPU CUDA 12 version 이상 사용하기

              윈도우 환경에서 WSL로 Tensorflow GPU CUDA 12 version 이상 사용하는 방법에 대해 정리해본 글입니다.
                2024-03-21 (목) 05:17