@senspond
>
PIL이미지 <-> numpy, tensor 상호변환, matplotlib 로 이미지시각화 방법 정리를 해본 글입니다
PIL이미지 <-> numpy, tensor 상호변환, matplotlib 로 이미지시각화 방법 정리를 해본 글입니다
from PIL import Image
img = Image.open("./cat_dog_images/cat-01.jpg")
#img.show()
PIL Image.open 으로 이미지 데이터를 불러 올 수가 있습니다.
img_np = np.array(img)
print(img_np)
img_2 = Image.fromarray(img_np) # NumPy array to PIL image
img_2.show()
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 범위 값을 가져야 합니다.
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 범위로 변환됩니다
tensor_PIL = transforms.ToPILImage()
image = tensor_PIL(t_img)
print(type(image)) # <class 'PIL.Image.Image'>
# image.show()
파이토치 torchvision.transforms 모듈의 ToPILImage() 메소드를 통해 간단하게 PIL 이미지 형태로 변환이 가능합니다.
예시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로 변환했다면 그 형식에 맞도록 역 변환 해줘야 합니다.
안녕하세요. Red, Green, Blue 가 만나 새로운 세상을 만들어 나가겠다는 이상을 가진 개발자의 개인공간입니다.
현재글에서 작성자가 발행한 같은 카테고리내 이전, 다음 글들을 보여줍니다
@senspond
>