이미지 데이터 처리의 기본 - Pillow 기본 사용법

2364 단어 pillowpillow

컴퓨터에서 이미지는 배열형태의 데이터로 표현된다.
가로 세로 32x 32 픽셀에 RGB 색상 채널이 있다면, Numpy로 [32, 32, 3]차원의 배열을 생성하면 된다. 또한 데이터 타입을 값이 부호가 없는(unsigned) 8비트 정수(integer)가 되어 0~255(2의 8승 = 256) 사이의 값을 나타내는 uint8을 사용해야한다.

import numpy as np
from PIL import Image

data = np.zeros([32, 32, 3], dtype=np.uint8)
image = Image.fromarray(data, 'RGB') # data를 이미지 객체로 변환한 뒤 화면에 표시한다.
image

PIL.Image.fromarray()는 ()안에 데이터를 이미지 객체로 변환한다.
np.zeros()로 초기화된 모든 픽셀의 모든 채널의 값이 0이기 때문에 검은색 이미지가 나왔지다. 이번에는 모든 픽셀이 빨간색으로 색상을 바꿔보자.

data[:,:] = [255, 0, 0] # R, G, B
image = Image.fromarray(data, 'RGB')
image

예제를 만들어보자.
가로 세로 각각 128픽셀의 흰색 이미지를 만들어 화면에 표시해보자.

data = np.zeros([128, 128, 3], dtype=np.uint8)
data[:, :] = [255, 255, 255]
image = Image.fromarray(data, 'RGB')
image


음.... 보이진 않지만 분명 있다....

연습용 이미지로 실습을 간단히 해보자!

from PIL import Image
import os

# 파일 경로
image_path = os.getcwd()+'/practice_image.png'

# 이미지 열기
img = Image.open(image_path)
img

# width와 height 출력
print(img.width)
print(img.height)

# JPG 파일 형식으로 저장해보기
new_image_path = os.getcwd() + '/practice_image.jpg'
img = img.convert('RGB')
img.save(new_image_path)

이미지의 width와 height가 출력된다.

이 이미지를 resize()를 사용하여 크기를 변경해보자.

resized_image = img.resize((100,200))

resized_image_path = os.getcwd()+'/resized_practice_image.jpg'
resized_image.save(resized_image_path)
resized_image

crop()을 사용해서 이미지의 일부분만 가져오자.

region = img.crop((300, 100, 600, 400))

cropped_image_path = os.getcwd()+'/cropped_practice_image.jpg'
region.save(cropped_image_path)
region

좋은 웹페이지 즐겨찾기