본문 바로가기

STUDY/인공지능

np.array, ToTensor, ToPILImage 공부

728x90

https://supermemi.tistory.com/entry/Python-PIL-PIL-%EC%9D%B4%EB%AF%B8%EC%A7%80%EC%99%80-TorchTensor-%EB%B3%80%ED%99%98-transforms-1

 

[ Python / PIL ] PIL 이미지와 Torch.Tensor 변환 (ToTensor, ToPILImage)

2021.12.29 - [Computer Language/Python] - [ Python / PIL ] PIL 이미지, Numpy 배열 변환 및 저장 ( Image.fromarray(), np.array(), np.asarray() ) [ Python / PIL ] PIL 이미지, Numpy 배열 변환 및 저장 ( Image.fromarray(), np.array(), np.asar

supermemi.tistory.com

위 블로그 내용을 다시 적으면서 공부한거임.


  • numpy.ndarray  : H X W X C
  • C : RGB는 3, Grayscale은 1 또는 0 의 값을 가짐
  • 이미지의 밝기 : 최소 0, 최대 255값을 가짐. 밝을 수록 숫자가 커짐

[1. PIL img -> ndarray]

from PIL import Image
import numpy as np

rgb_img = Image.open('cat.jpg').convert('RGB')

rgb_img_arr = np.array(rgb_img)

print('RGB img arr:', rgb_img_arr)
print('RGB img shape:', rgb_img_arr.shape)
print('RGB scale:', 'min:', rgb_img_arr.min(), 'max:', rgb_img_arr.max())

결과

이미지를 ndarray로 바꿨을 때는 H 340, W 557, C 3의 값을 가짐

밝기 또한 최소 0, 최대 255임

 

 

[2. PIL img 를 pytorch tensor 이미지로 변환]

  • PIL img : H X W X C
  • tensor : C X H X W
from torchvision.transforms import ToTensor, ToPILImage

tf_toTensor = ToTensor()

rgb_img_tensor_from_PIL = tf_toTensor(rgb_img)

print('RGB img tensor from PIL:', rgb_img_tensor_from_PIL)
print('RGB img tensor from PIL size:', rgb_img_tensor_from_PIL.size())
print('RGB img tensor from PIL scale:', rgb_img_tensor_from_PIL.min(), rgb_img_tensor_from_PIL.max())

결과

size를 통해 형태를 보면 ndarray와 달리 채널 값이 맨 앞으로 간 것을 알 수 있다.

밝기 범위 또한 0~ 255가 아닌 0~1로 바뀌었다.

 

 

[3.  ndarray -> pytorch tensor image]

  • ndarray : H X W X C
  • tensor : C X H X W
rgb_img_tensor_from_ndarray = tf_toTensor(rgb_img_arr)

print('RGB img tensor form  ndarray:', rgb_img_tensor_from_ndarray)
print('RGB img tensor form  ndarray size:', rgb_img_tensor_from_ndarray.size())
print('RGB img tensor form  ndarray scale:', rgb_img_tensor_from_ndarray.min(), rgb_img_tensor_from_ndarray.max())

결과

 

[4. pytorch tensor image -> ndarray]

  • tensor : C X H X W
  • ndarray : H X W X C
tf_toPILImage = ToPILImage()

img_PIL_from_Tensor = tf_toPILImage(rgb_img_tensor_from_PIL)

print('img_PIL_from_Tensor array :',np.array(img_PIL_from_Tensor))
print('img_PIL_from_Tensor array shape :',np.array(img_PIL_from_Tensor).shape)

결과

 

[5. numoy arr 랑 tensor 값을 비교]

print(np.sum(~(rgb_img_arr == np.array(img_PIL_from_Tensor))))

결과

두 값이 같기 때문에 0을 반환함

 

728x90

'STUDY > 인공지능' 카테고리의 다른 글

EasyDict 이란? 사용법  (0) 2023.03.29
yaml 파일 다루기, 읽기, key value 값 뽑기  (0) 2023.03.29
Attention mechanism  (0) 2023.03.27
albumentations library  (0) 2023.02.24
[ML 책] 머신러닝이란?  (0) 2022.11.05