[파이썬] Pillow 이미지의 톤맵핑 처리하기

톤맵핑(Tone Mapping)은 이미지 처리 기술 중 하나로, 이미지의 밝기와 색상을 조정하여 원하는 효과를 얻는 방법입니다. 이번 블로그 포스트에서는 Python의 Pillow 라이브러리를 사용하여 이미지의 톤맵핑 처리하는 방법을 알아보겠습니다.

Pillow이란?

Pillow는 Python의 이미지 처리 라이브러리로, 이미지 조작, 변환, 필터링 등 다양한 작업을 수행할 수 있습니다. 이미지를 로드하고 저장하거나, 크기 조정, 회전, 자르기 같은 작업을 할 수 있으며, 필터를 적용하여 이미지를 개선하는 등의 작업도 가능합니다.

톤맵핑 처리하기

from PIL import Image

def tone_mapping(image_path, factor):
    # 이미지 로드
    image = Image.open(image_path)

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

    # 이미지의 픽셀 데이터를 가져옴
    pixels = image.load()

    # 이미지의 가로, 세로 크기를 가져옴
    width, height = image.size

    # 톤맵핑 처리 시작
    for y in range(height):
        for x in range(width):
            r, g, b = pixels[x, y]

            # 각 픽셀의 R, G, B 값을 조정
            r = int(r * factor)
            g = int(g * factor)
            b = int(b * factor)

            # 픽셀 값을 다시 설정
            pixels[x, y] = (r, g, b)

    # 처리된 이미지를 저장
    image.save("output.jpg")

위의 코드는 톤맵핑 처리를 수행하는 tone_mapping 함수입니다. 함수는 이미지 파일의 경로와 톤맵핑의 강도(factor)를 인자로 받아 처리 결과를 “output.jpg”라는 이름으로 저장합니다.

처리 과정은 다음과 같습니다:

  1. Pillow의 Image.open 함수를 사용하여 이미지를 로드합니다.
  2. RGB 모드로 이미지를 변환합니다.
  3. image.load 함수를 사용하여 이미지의 픽셀 데이터를 가져옵니다.
  4. 이미지의 가로, 세로 크기를 가져옵니다.
  5. 이미지의 모든 픽셀에 대해 톤맵핑 처리를 수행합니다. 각 픽셀의 R, G, B 값을 톤맵핑 강도(factor)에 따라 조정합니다.
  6. 처리된 이미지를 저장합니다.

톤맵핑 처리 예제

다음은 위에서 정의한 tone_mapping 함수를 사용하여 이미지의 톤맵핑 처리를 수행하는 예제 코드입니다:

# 이미지 파일 경로와 톤맵핑 강도(factor)를 지정
image_path = "input.jpg"
factor = 0.5

# 톤맵핑 처리 수행
tone_mapping(image_path, factor)

위의 예제 코드에서 input.jpg는 톤맵핑 처리를 수행할 이미지 파일의 경로입니다. factor는 톤맵핑의 강도를 나타내는 값으로, 0 ~ 1 범위의 값을 설정할 수 있습니다.

마무리

Pillow 라이브러리를 사용하여 이미지의 톤맵핑 처리를 수행하는 방법에 대해 알아보았습니다. Pillow는 간편한 사용법과 다양한 이미지 처리 기능으로 이미지 처리 작업을 더욱 쉽게 만들어줍니다. 톤맵핑을 포함한 다양한 이미지 처리 작업을 Pillow를 이용하여 쉽게 구현해 보세요!