티스토리 뷰
학습목표:
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 설치
- 필로우 패키지 설치
- PIL 에서 Image 클래스 import
- 버전확인
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)
- 예: from PIL import ImageFilter
- 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
반응형