콘텐츠로 건너뛰기

PIL 이미지 사용 방법: 손쉽게 처리하기 (How to Effortlessly Use PIL Images)

[

Python Pillow 라이브러리를 사용한 이미지 처리

Pillow_Watermarked.b86d7e55f981.jpg)

이미지를 보면 사물과 사람이 보입니다. 그러나 파이썬이나 다른 언어를 사용하여 이미지를 프로그래밍으로 읽을 때 컴퓨터는 숫자 배열로 이를 인식합니다. 이 튜토리얼에서는 Python Pillow 라이브러리를 사용하여 이미지를 조작하고 기본 이미지 처리를 수행하는 방법을 배울 것입니다.

Pillow와 그 이전 버전인 PIL은 이미지 처리와 관련된 원래의 Python 라이브러리입니다. 이미지 처리를 위한 다른 Python 라이브러리들이 존재하지만, Pillow는 이미지 이해와 처리에 중요한 도구로 남아 있습니다.

Pillow는 Photoshop과 같은 이미지 처리 소프트웨어에서 사용되는 도구와 유사한 기능을 제공합니다. 몇몇 최신 Python 이미지 처리 라이브러리들이 Pillow를 기반으로 개발되었으며, 종종 더 고급 기능을 제공합니다.

이 튜토리얼에서는 다음을 배울 것입니다:

  • Pillow를 사용하여 이미지 읽기
  • 기본적인 이미지 조작 작업 수행하기
  • Pillow를 사용한 이미지 처리
  • NumPy와 Pillow를 함께 사용하여 추가 처리하기
  • Pillow를 사용하여 애니메이션 생성하기

이 튜토리얼은 Python Pillow 라이브러리를 통해 가장 일반적인 메소드를 통해 무엇을 얻을 수 있는지 개요를 제공합니다. 이러한 메소드들을 사용하는 데 자신감을 갖게 되면, Pillow의 문서를 활용하여 라이브러리의 나머지 메소드를 탐색할 수 있습니다. Python에서 이전에 이미지 작업을 해본 적이 없다면, 바로 시작할 수 있는 좋은 기회입니다.

이 튜토리얼에서는 Pillow로 조작하고 처리할 수 있는 여러 이미지를 사용합니다. 이 이미지들은 튜토리얼의 이미지 저장소에서 다운로드 할 수 있습니다.

library-images/)

이제 이미지를 활용하기 위해 준비가 되었습니다.

Python Pillow 라이브러리를 사용한 기본 이미지 작업

Python Pillow 라이브러리는 PIL(Python Imaging Library)이라는 오래된 라이브러리의 포크(fork)입니다. PIL은 Python Imaging Library의 약자로, 이미지 처리에 사용되는 라이브러리입니다.

from PIL import Image
# 이미지 열기
img = Image.open("image.jpg")
# 이미지 크기 확인
width, height = img.size
print("이미지 크기:", width, "x", height)
# 이미지 보기
img.show()

위의 코드는 Pillow를 사용하여 이미지를 열고, 이미지의 크기를 확인하고, 이미지를 보는 방법을 보여줍니다.

Python Pillow 라이브러리를 사용한 이미지 기본 조작

다음으로는 Pillow를 사용하여 이미지의 기본적인 조작을 수행해 보겠습니다. 지정된 이미지를 자르거나 크기를 조정하는 등의 작업이 가능합니다.

from PIL import Image
# 이미지 열기
img = Image.open("image.jpg")
# 이미지 자르기
box = (100, 100, 400, 400)
region = img.crop(box)
# 자른 이미지 저장
region.save("cropped_image.jpg")
# 이미지 크기 조정
resized_img = img.resize((500, 500))
# 크기 조정된 이미지 저장
resized_img.save("resized_image.jpg")

위의 예제 코드는 이미지를 자르고 크기를 조정하는 방법을 보여줍니다. 이미지를 열고, 자를 영역을 지정하고, 자른 이미지를 저장한 다음, 크기를 조정하고 크기를 조정한 이미지를 저장하는 과정을 보여줍니다.

Python Pillow 라이브러리를 사용한 이미지 처리

Pillow를 사용하면 이미지에 다양한 처리를 할 수 있습니다. 예를 들어, 이미지를 회전시키거나 필터를 적용하는 등의 작업을 할 수 있습니다.

from PIL import Image, ImageFilter
# 이미지 열기
img = Image.open("image.jpg")
# 이미지 회전하기
rotated_img = img.rotate(45)
# 회전된 이미지 저장
rotated_img.save("rotated_image.jpg")
# 이미지 필터 적용하기
filtered_img = img.filter(ImageFilter.GaussianBlur(radius=10))
# 필터 적용된 이미지 저장
filtered_img.save("filtered_image.jpg")

위의 코드는 이미지를 회전시키고 필터를 적용하는 방법을 보여줍니다. 이미지를 열고, 회전할 각도를 지정하고 회전된 이미지를 저장한 다음, 이미지에 필터를 적용하고 필터가 적용된 이미지를 저장하는 과정을 보여줍니다.

NumPy와 Pillow를 사용한 이미지 추가 처리

Pillow를 사용하여 이미지를 처리한 뒤에는 다른 라이브러리인 NumPy와 함께 사용하여 추가 처리를 할 수 있습니다. 예를 들어, 이미지를 이진화하거나 이미지를 합성하는 등의 작업을 할 수 있습니다.

import numpy as np
from PIL import Image
# Pillow를 사용하여 이미지 열기
pil_img = Image.open("image.jpg")
# 이미지를 NumPy 배열로 변환
img_array = np.array(pil_img)
# 이미지 이진화
binary_img = np.where(img_array > 128, 255, 0)
# 이진화된 이미지로부터 Pillow 이미지 생성
binary_pil_img = Image.fromarray(binary_img)
# 이진화된 이미지 저장
binary_pil_img.save("binary_image.jpg")

위의 코드는 NumPy와 Pillow를 함께 사용하여 이미지를 이진화하는 방법을 보여줍니다. Pillow를 사용하여 이미지를 열고, NumPy 배열로 변환한 다음, 배열의 값에 따라 이진화를 수행하고 이진화된 이미지를 저장하는 과정을 보여줍니다.

Pillow를 사용하여 애니메이션 생성

Pillow는 이미지를 사용하여 애니메이션을 생성할 수 있는 기능도 제공합니다. 여러 이미지를 연속적으로 보여주는 방식으로 애니메이션을 구현할 수 있습니다.

from PIL import Image
# 이미지를 담을 리스트
image_list = []
# 이미지 열기
for i in range(10):
img = Image.open(f"image{i}.jpg")
image_list.append(img)
# 애니메이션 생성
image_list[0].save("animation.gif", save_all=True, append_images=image_list[1:], duration=200, loop=0)

위의 코드는 여러 이미지를 연속적으로 보여주는 방식으로 애니메이션 GIF를 생성하는 방법을 보여줍니다. 이미지를 열고 리스트에 추가한 다음, 리스트의 첫 번째 이미지를 기준으로 애니메이션을 생성하고 저장하는 과정을 보여줍니다.

결론

이 튜토리얼에서는 Python Pillow 라이브러리를 사용하여 이미지를 처리하는 방법을 배웠습니다. Pillow를 사용하여 이미지를 읽고, 기본적인 처리 작업을 수행하고, 이미지를 보간하고, NumPy와 Pillow를 함께 사용하여 이미지 추가 처리 및 애니메이션 생성을 할 수 있는 방법을 살펴보았습니다. Pillow의 다양한 메소드와 기능들은 이 튜토리얼을 통해 배운 개념을 기반으로 더 많은 작업을 수행할 수 있습니다. 이미지 처리에 대한 실습을 진행하면서 Python에서 이미지에 적용할 수있는 다양한 기능들을 확장해 나갈 수 있을 것입니다.