티스토리 뷰

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)
  • 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
반응형