티스토리 뷰

학습목표:
pillow 라이브러리의 활용

https://pillow.readthedocs.io/en/stable/

 

1.필로우(Pillow)라이브러리란?

Python Imaging Library(PIL)라는 파이썬 이미지 처리 라이브러리의 지원이 2011년 중단되고, Pillow가 PIL의 후속 프로젝트로 나왔습니다. 즉, Pillow가 공식 PIL이라고 보면 되겠네요. 실제로 import 할 때에도 PIL이라는 이름을 사용한답니다.

다룰 수 있는 이미지 파일 형식으로는 PPM, PNG, JPEG, GIF, TIFF, BMP 등이 있으며, 지원하지 않는 파일 형식은 라이브러리를 확장해서 새로운 파일 디코더를 만드는 것이 가능하다고 합니다.

  • 이미지 처리를 위한 라이브러리 - , 이미지 파일을 생성, 수정, 열기 등 다양한 이미지 처리 작업을 수행
  • 필로우는 많은 영상 포맷을 지원(BMP, EPS, GIF, IM, JPEG, MSP, PCX, PNG, PPM, TIFF, WebP, ICO, PSD, PDF 등의 형식을 지원)

2.pillow 설치

  1. 필로우 패키지 설치
  2. PIL 에서 Image 클래스 import
  3. 버전확인
pip install pillow
from PIL import image
# Print the PIL version
print(Image.__version__)

주요 매서드

  • open(): 이미지를 파일로부터 불러옵니다. 예: img = Image.open('example.jpg')
  • save(): 이미지를 파일로 저장합니다. 예: img.save('example.png')
  • show() :기본 이미지 뷰어를 사용하여 이미지를 표시
  • resize(): 이미지를 새로운 크기로 조정합니다. 예: img_resized = img.resize((width, height))
  • rotate(): 이미지를 지정한 각도만큼 회전시킵니다. 예: img_rotated = img.rotate(45)
  • crop(): 이미지의 일부분을 잘라냅니다. 예: img_cropped = img.crop((left, upper, right, lower))
  • convert(): 이미지의 모드를 변경합니다. 예: img_gray = img.convert('L')
  • filter(): 이미지를 필터링합니다 (예: 블러, 샤프 등).
    • 예: from PIL import ImageFilter
      img_blurred = img.filter(ImageFilter.BLUR)
  • transpose(): 이미지를 반전 또는 회전합니다. 예: img_flipped = img.transpose(Image.FLIP_LEFT_RIGHT)
  • thumbnail(): 이미지의 썸네일(작은 버전)을 만듭니다. 예: img.thumbnail((width, height))

3.이미지 열기 및 표시 : open()

  • Pillow 패키지에서 제공하는 Image 클래스를 사용하면 여러가지 다양한 포맷의 이미지를 읽고 변환하여 저장할 수 있다.
  • open 메서드는 이미지 파일을 열 수 있다.
  • 이미지 파일 열기 및 보기: Pillow를 사용하여 이미지 파일을 열고, 파이썬 스크립트에서 직접 볼 수 있습니다.
    • 먼저 경로를 확인해보자
import os
os.getcwd()
  • Format: 이미지의 파일 포맷 (예: JPEG, PNG)
  • Size: 이미지의 크기 (너비와 높이)
  • Mode: 이미지의 색상 모드 (예: RGB, CMYK)
from PIL import Image
img = Image.open('cat.png')

print(img.size)
print(img.mode)
print(img.format)
print(img.filename)
img
 #코랩에서는 img.show()대신 img 객체를 바로 볼 수 있다.
#맷플로리로 보기
import matplotlib.pyplot as plt

plt.imshow(rimg)
plt.axis('off')
plt.show()

4.이미지 저장

  • 파일로 저장할 때는** save 메서드**를 사용한다.
  • 이 때 확장자를 지정하면 해당 이미지 형식으로 자동 변환하여 저장한다.
img.save('newcat.png')
newimg=Image.open('newcat.png')
newimg

5.이미지 회전, 리사이즈, 뒤집기

rotate() : rotate(각도) 함수를 사용하여 이미지를 회전

from PIL import Image

img = Image.open('cat.jpg')
img_rot = img.rotate(90)
img_rot

resize()

# 새로운 크기를 지정 (너비, 높이)
new_size = (width, height)

transpose(method)- 뒤집기

  • 이미지의 방향을 변환하는 데 사용
  • method는 이미지를 변환하는 방법을 지정하는 매개변수
  • transpose() 주요 매개변수
    • Image.FLIP_LEFT_RIGHT: 이미지를 좌우로 뒤집습니다.
    • Image.FLIP_TOP_BOTTOM: 이미지를 상하로 뒤집습니다.
    • Image.ROTATE_90: 이미지를 90도 회전합니다.
    • Image.ROTATE_180: 이미지를 180도 회전합니다.
    • Image.ROTATE_270: 이미지를 270도 회전합니다.
  • 리사이징 후 저장하기
from PIL import Image
img = Image.open('cat.jpg')
img300 = img.resize((300,300))
img300.save('cat300.jpg')

6.ImageFilter - 이미지에 필터 씌우기

  • Pillow 라이브러리에서 이미지에 필터를 적용하는 것은 간단하며, 다양한 내장 필터를 사용하여 이미지의 외관을 변경할 수 있습니다.
  • 필터를 사용하려면 먼저 ImageFilter 모듈을 임포트한 후 원하는 필터를 이미지에 적용합니다.
  • 필요한 모듈 임포트:
    • BLUR: 이미지를 흐리게 합니다.
    • CONTOUR: 이미지의 윤곽선을 강조합니다.
    • DETAIL: 이미지의 디테일을 강화합니다.
    • EDGE_ENHANCE: 이미지의 가장자리를 강조합니다.
    • EMBOSS: 이미지에 양각 효과를 줍니다.
    • SHARPEN: 이미지를 더 선명하게 합니다.
    • SMOOTH: 이미지를 부드럽게 처리합니다.
from PIL import Image, ImageFilter

img = Image.open('cat300.jpg')
f_img = img.filter(ImageFilter.CONTOUR)
f_img

7.이미지 자르고 붙이기 - crop() / paste()

  • 이미지를 자르기 위해 crop() 함수를 사용
  • 이미지의 특정 부분을 잘라내어 새로운 이미지로 만들 수 있게 해줌
  • 자르고 싶은 영역은 좌표의 튜플로 지정 (left, upper, right, lower) 형식, 이미지의 왼쪽 상단 모서리에서 시작하여 오른쪽 하단 모서리까지의 직사각형 영역을 정의합니다.
# 자를 영역 정의 (left, upper, right, lower)
crop_area = (left, upper, right, lower)

# 이미지 자르기
cropped_img = img.crop(crop_area)
from PIL import Image
img = Image.open('cat.jpg')

crop_area = (200,200, 500,500)
crop_img = img.crop(crop_area)
print(crop_img.size)
crop_img

중앙 부분 자르기

 

  • 중앙 부분을 자르기 위한 좌표를 계산합니다.
  • 이미지의 가로와 세로 크기의 1/4 지점부터 시작하여 3/4 지점까지의 영역을 자르는 방법을 보여줍니다
  • crop() 함수를 사용하면 이미지의 특정 부분을 쉽게 잘라낼 수 있으며, 이를 통해 이미지 분석, 데이터 전처리, 또는 그래픽 디자인 작업에 유용하게 사용할 수 있습니다.
img = Image.open('cat01.jpg')

# 이미지의 크기를 가져옵니다
width, height = img.size

# 중앙 부분을 자르기 위한 좌표를 계산합니다
left = width/4
upper = height/4
right = 3 * width/4
lower = 3 * height/4

crop_area = (left, upper, right, lower)
crop_img = img.crop(crop_area)

crop_img

붙이기-paste()

  • paste() 함수를 이용하면 이미지의 특정 부분을 다른 이미지에 쉽게 추가하거나 결합할 수 있다.
from PIL import Image

# 원본 이미지 불러오기
img = Image.open('cat.jpg')

# 잘라낼 영역 정의
crop_area = (50, 50, 200, 200)

# 이미지 잘라내기
crop_img = img.crop(crop_area)

# 다른 이미지 불러오기
other_img = Image.open('dog.jpg')

# 붙일 위치 정의
position = (100, 100)

other_img.paste(crop_img, position)

other_img

8.RGB 채널 처리하기

  • RGB 이미지는 빨강(Red), 초록(Green), 파랑(Blue)의 세 가지 색상 채널로 구성
from PIL import Image
img = Image.open('cat.jpg')
print(img.mode)
  • 채널 분리 - img.split()
from PIL import Image
img = Image.open('cat.jpg')
print(img.mode)
r, g, b= img.split()
r
  • 채널 병합-merge()
rgb_img = Image.merge('RGB', (r,g,b))
rgb_img

 


9.이미지 텍스트 추가

from PIL import ImageDraw, ImageFont, Image
img = Image.open('dog.jpg')

 

from PIL import Image, ImageDraw, ImageFont  # Pillow 라이브러리에서 필요한 모듈 불러오기

# 이미지 열기
img = Image.open("dog.jpg")  # 기존 이미지 파일 불러오기

# 이미지 위에 그리기 위한 객체 생성
draw = ImageDraw.Draw(img)  # 이미지 위에 텍스트나 도형을 그릴 수 있는 객체 생성

# 기본 폰트 설정
font = ImageFont.load_default(40)  # Pillow에서 제공하는 기본 폰트 로드

# 이미지에 텍스트 추가
draw.text(
    (20, 20),               # 텍스트를 그릴 좌표 (x, y) 설정
    'hello, world!',        # 텍스트 내용
    font=font,              # 사용할 폰트
    fill='black'            # 텍스트 색상 (검정색)
)

# 수정된 이미지를 저장
img.save('updated_cat.png')  # 이미지를 새로운 파일명으로 저장

# 이미지 출력
img
728x90
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
반응형