PIL :: 컴퓨터 비전 - mindscale
Skip to content

PIL

PIL 라이브러리

  • Python Imaging Library
  • 스웨덴 기업 Secret Lab AB가 1995년부터 개발, 2011년에 중단
  • Pillow라는 이름으로 포크(fork)되어 현재까지 지속 중
  • 이미지 파일 열기, 닫기, 변환 등 기본적인 기능 제공

이미지 열기

PIL 라이브러리

from PIL import Image

이미지 파일인 balloon.webp를 열기

img = Image.open("balloon.webp")

img 객체를 출력

img

이미지 파일의 형식을 나타내는 문자열을 반환

img.format
'WEBP'

이미지 파일의 크기

img.size
(1024, 1024)

이미지 파일의 크기를 나타내는 (가로, 세로) 형식의 튜플(tuple)을 반환 해당 코드를 실행하면, 이미지 파일의 가로와 세로 크기가 나타남

이미지 파일의 색상 모드

img.mode
'RGB'
  • RGB: 빨강, 초록, 파랑 3가지 색을 사용하는 모드
  • RGBA: 빨강, 초록, 파랑 3가지 색과 투명도(알파 채널)를 사용하는 모드
  • L: 이미지를 흑백으로 표현하는 모드
    • 각 픽셀의 색상은 0부터 255까지의 값으로 표현
    • 0은 검은색, 255는 흰색을 의미
  • CMYK: 색상을 시안(Cyan), 마젠타(Magenta), 노랑(Yellow), 검정(Black) 4가지 색으로 나타내는 모드
    • 주로 인쇄를 위한 이미지 파일에 사용

이미지 파일의 크기 변경

이미지 파일의 크기를 가로와 세로 256으로 변경

img = img.resize((256, 256))

가로, 세로 크기를 절반으로

w, h = img.size 
size = w // 2, h // 2

크기 변경

small = img.resize(size)
small

저장

small.save('small.png')

변환

이미지 파일을 상하반전

img.transpose(Image.FLIP_TOP_BOTTOM)

45도 회전

img.rotate(45)

모드를 흑백(L)으로 변환

img.convert("L")

흑백을 컬러(RGB)로 바꿀 수는 있으나, 색상이 새로 생기지는 않음(RGB로 표현된 검은색, 흰색, 회색 등이 됨)

RGB 분리

이미지 파일의 RGB(빨강, 초록, 파랑) 채널을 분리

red, green, blue = img.split()

red 채널을 흑백으로 보기

흰색은 빨강이 강한 곳, 검은 색은 빨강이 약한 곳

red

red 채널은 밝기 정보만 있음(L모드)

red.mode
'L'

빈 이미지 만들기

같은 크기의 흑백 모드를 갖는 새로운 이미지 객체를 생성

empty = Image.new('L', img.size)

Red 채널을 빨간색으로 보기

red 채널을 흑백 대신 흑-적으로 보기 채널1, 채널2, 채널3을 병합하여 RGB 모드의 새로운 이미지 객체를 생성

Image.merge("RGB", (red, empty, empty))

red 채널을 빨간색으로, 나머지 두 채널을 빈 이미지로(검은색)으로 설정 기존 이미지 파일의 red 채널을 빨간색으로 표현

필터

from PIL import ImageFilter

이미지를 흑백 모드로 변환

img1 = img.convert('L')

이미지에서 경계선을 검출하는 필터

img2 = img1.filter(ImageFilter.FIND_EDGES)
img2

이미지의 경계선을 강조하는 필터

img3 = img2.filter(ImageFilter.EDGE_ENHANCE)
img3

필터

흐리게

img.filter(ImageFilter.BLUR) 

윤곽선

img.filter(ImageFilter.CONTOUR)