티스토리 뷰
1.필로우(Pillow)라이브러리란?
- 이미지 처리를 위한 라이브러리 - , 이미지 파일을 생성, 수정, 열기 등 다양한 이미지 처리 작업을 수행
- 필로우는 많은 영상 포맷을 지원(BMP, EPS, GIF, IM, JPEG, MSP, PCX, PNG, PPM, TIFF, WebP, ICO, PSD, PDF 등의 형식을 지원)
2.pillow 설치
pip install pillow
from PIL import Image
# Print the PIL version
print(Image.__version__)
기본 사용 예시
from PIL import Image
# 이미지 열기
img = Image.open('example.jpg')
# 이미지 정보 확인
print(img.format, img.size, img.mode)
# 이미지 회전 및 저장
rotated = img.rotate(45)
rotated.save('rotated.jpg')
✨ 주요 기능
기능 | 메서드 |
이미지 열기 | Image.open() |
크기 변경 | img.resize((width, height)) |
회전 | img.rotate(각도) |
자르기 | img.crop((left, top, right, bottom)) |
필터 적용 | ImageFilter 모듈 활용 |
두 라이브러리는 파이썬에서 데이터 시각화와 이미지 처리를 시작하는 데 필수적인 도구이며, 초보자도 직관적으로 사용할 수 있는 간단한 문법을 제공한다.
주요 매서드
- 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))
이미지 읽기
- Pillow 패키지에서 제공하는 Image 클래스를 사용하면 여러가지 다양한 포맷의 이미지를 읽고 변환하여 저장할 수 있다.
- open 메서드는 이미지 파일을 열 수 있다.
from PIL import Image
img = Image.open('cat.png')
print(img.size)
print(img.mode)
print(img.format)
img
img #코랩에서는 img.show()대신 img 객체를 바로 볼 수 있다.
이미지 저장
- 파일로 저장할 때는.save를 사용한다.
- 이 때 확장자를 지정하면 해당 이미지 형식으로 자동 변환하여 저장한다.
img = Image.open('cat.jpg')
img.save('cat2.jpg')
rotate() - rotate(각도) 함수를 사용하여 이미지를 회전
from PIL import Image
img = Image.open('cat.jpg')
rotating_img = img.rotate(90)
rotating_img
rotating_img.save('a.jpg')
resize()
- 이미지의 크기를 변경
- 이 함수는 새로운 크기를 튜플 형태로 입력받아, 지정된 크기로 이미지를 조정합니다.
- 원본 이미지의 종횡비(aspect ratio)는 자동으로 유지되지 않기 때문에 새로운 크기가 원본 이미지의 종횡비와 다를 경우 이미지가 왜곡될 수 있습니다.
from PIL import Image
img = Image.open('cat.jpg')
print(img.size)
img_s = img.resize((200,200)) #(x, y 형태로 표현)
img_s
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')
imp_opp = img.transpose(Image.FLIP_TOP_BOTTOM)
new2 = imp_opp.resize((200,200))
new2
6.ImageFilter - 이미지에 필터 씌우기✅
- Pillow 라이브러리에서 이미지에 필터를 적용하는 것은 간단하며, 다양한 내장 필터를 사용하여 이미지의 외관을 변경할 수 있습니다.
- 필터를 사용하려면 먼저 ImageFilter 모듈을 임포트한 후 원하는 필터를 이미지에 적용합니다.
- 필요한 모듈 임포트:
- BLUR: 이미지를 흐리게 합니다.- 강도조절불가
- CONTOUR: 이미지의 윤곽선을 강조합니다.
- DETAIL: 이미지의 디테일을 강화합니다.
- EDGE_ENHANCE: 이미지의 가장자리를 강조합니다.
- EMBOSS: 이미지에 양각 효과를 줍니다.
- SHARPEN: 이미지를 더 선명하게 합니다.
- SMOOTH: 이미지를 부드럽게 처리합니다.
from PIL import Image
from PIL import ImageFilter
img = Image.open('cat.jpg')
img_blur = img.filter(ImageFilter.BLUR)
img_blur
이미지 자르고 붙이기 - 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, 400, 400)
crop_img = img.crop(crop_area)
print(crop_img.size)
crop_img
중앙 부분 자르기
- 중앙 부분을 자르기 위한 좌표를 계산합니다.
- 이미지의 가로와 세로 크기의 1/4 지점부터 시작하여 3/4 지점까지의 영역을 자르는 방법을 보여줍니다
- crop() 함수를 사용하면 이미지의 특정 부분을 쉽게 잘라낼 수 있으며, 이를 통해 이미지 분석, 데이터 전처리, 또는 그래픽 디자인 작업에 유용하게 사용할 수 있습니다.
img = Image.open('cat.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 = (100, 100, 300, 300)
# 이미지 잘라내기
crop_img = img.crop(crop_area)
# 다른 이미지 불러오기
other_img = Image.open('dog.jpg')
# 붙일 위치 정의
position = (100, 100)
other_img.paste(crop_img,position)
other_img
RGB 채널 처리하기
- RGB 이미지는 빨강(Red), 초록(Green), 파랑(Blue)의 세 가지 색상 채널로 구성
from PIL import Image
img = Image.open('cat.jpg')
print(img.mode)
- 채널 분리 - img.split()
r, g, b = img.split()
r
- 채널 병합-merge()
RGB_img = Image.merge('RGB', (r,g,b))
RGB_img
이미지 텍스트 추가
- Image: 이미지를 열고, 저장하며 다양한 기본 이미지 처리 기능을 제공
- ImageDraw: 이미지에 다양한 도형이나 텍스트를 그리는 기능을 제공
- ImageFont: 텍스트를 이미지에 그릴 때 사용할 특정 폰트를 정의
from PIL import ImageDraw, ImageFont, Image
img = Image.open('cat.jpg')
# 드로잉 객체 생성
draw = ImageDraw.Draw(img)
# 기본 폰트 사용
font = ImageFont.load_default()
# 이미지에 텍스트 추가
draw.text((100,100), 'hello, world!', font=font, fill ='white')
# 이미지 표시
img
# 변경된 이미지 저장
728x90
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
반응형