[파이썬] Pillow 채널별로 이미지 연산하기

이미지 처리는 컴퓨터 비전 분야에서 중요한 요소로 인식되고 있습니다. 특히, 이미지에 대한 채널별 연산은 이미지 분석 및 변환 과정에서 필수적입니다. 이번 블로그 포스트에서는 Python의 Pillow 라이브러리를 통해 채널별로 이미지 연산하는 방법에 대해 알아보겠습니다.

Pillow이란?

Pillow는 Python에서 이미지 처리를 위한 강력한 라이브러리로서, 이미지의 로딩, 저장, 변환 등의 다양한 작업을 수행할 수 있습니다. 채널별로 이미지 연산은 이러한 작업 중 하나로, 이미지의 각 채널을 독립적으로 처리하고자 할 때 사용됩니다.

이미지 로딩

우선, Pillow를 사용하여 이미지를 로딩하는 방법부터 알아보겠습니다. Pillow는 다양한 포맷의 이미지 파일을 지원하며, Image.open() 함수를 사용하여 이미지를 로딩할 수 있습니다.

from PIL import Image

image = Image.open("image.jpg")

이미지 파일의 경로를 Image.open() 함수에 전달하여 이미지를 로딩합니다. 이제 image 변수에는 Pillow 객체가 저장되어 있습니다.

채널별 연산

이제 Pillow를 사용하여 채널별로 이미지 연산을 수행해보겠습니다. Pillow 객체는 RGB 이미지를 기본적으로 사용하기 때문에, 이미지의 R, G, B 채널에 각각 접근하여 연산을 수행할 수 있습니다.

예를 들어, 이미지의 밝기를 조절하기 위해 각 채널의 픽셀 값을 수정하는 경우를 살펴보겠습니다.

from PIL import Image

# 이미지 로딩
image = Image.open("image.jpg")

# 이미지 객체를 RGB 모드로 변환
image = image.convert("RGB")

# 이미지의 크기 및 모드 확인
width, height = image.size
mode = image.mode
print(f"Image size: {width} x {height}")
print(f"Image mode: {mode}")

# 각 채널별로 연산 수행
r_channel, g_channel, b_channel = image.split()

# 각 채널의 밝기 값을 수정
r_channel = r_channel.point(lambda x: x * 0.5)   # R 채널의 밝기를 50%로 조절
g_channel = g_channel.point(lambda x: x * 1.2)   # G 채널의 밝기를 120%로 조절
b_channel = b_channel.point(lambda x: x * 0.8)   # B 채널의 밝기를 80%로 조절

# 연산이 완료된 채널들을 다시 병합하여 이미지로 출력
output_image = Image.merge("RGB", (r_channel, g_channel, b_channel))
output_image.show()

이 예제에서는 split() 함수를 사용하여 이미지의 각 채널을 분리한 후, point() 함수를 사용하여 각 픽셀의 값을 조절하였습니다. 마지막으로 merge() 함수를 사용하여 연산 결과를 다시 병합하여 출력하는 방법을 보여주었습니다.

마치며

이번 포스트에서는 Pillow 라이브러리를 사용하여 채널별로 이미지 연산하는 방법에 대해 간단히 알아보았습니다. Pillow는 다양한 이미지 처리 작업을 지원하며, 채널별 연산은 이미지 분석에 매우 유용한 기능입니다. 추가적인 기능과 사용 방법은 Pillow 공식 문서를 참고하시기 바랍니다.