[python] Pillow을 사용하여 이미지에 없애고 싶은 객체를 마스킹하는 방법

이미지 처리를 위한 Python 라이브러리인 Pillow를 사용하면 이미지에서 특정 객체를 없앨 수 있습니다. 이를 위해 마스킹 기술을 사용하여 객체를 표시하고, 해당 객체를 삭제하거나 가리는 효과를 줄 수 있습니다.

Pillow 설치

Pillow를 사용하기 위해 먼저 Pillow 패키지를 설치해야 합니다. 아래의 명령을 사용하여 Pillow를 설치합니다.

pip install pillow

이미지 마스킹하기

마스킹을 사용하여 이미지에서 특정 영역을 가리고 싶은 경우, 해당 영역을 선택하고 마스크(mask) 이미지를 생성해야 합니다. 마스크 이미지는 원본 이미지와 같은 크기의 흑백 이미지로 구성됩니다. 객체를 삭제하려는 영역은 흰색으로, 가리려는 영역은 검은색으로 설정합니다.

아래의 코드는 Pillow를 사용하여 이미지에 마스킹을 적용하는 예제입니다. 이 예제에서는 원본 이미지에서 아래쪽의 사각형 영역을 가리는 마스킹을 수행합니다.

from PIL import Image
import numpy as np

def apply_mask(image_path, mask_path, output_path):
    # 이미지 로드
    image = Image.open(image_path).convert("RGBA")
    image_array = np.array(image)

    # 마스크 이미지 로드
    mask = Image.open(mask_path).convert("L")
    mask_array = np.array(mask)

    # 마스킹 적용
    masked_image_array = np.copy(image_array)
    masked_image_array[mask_array == 0] = [0, 0, 0, 0]
    masked_image = Image.fromarray(masked_image_array, "RGBA")

    # 결과 이미지 저장
    masked_image.save(output_path)

# 이미지 파일 경로와 마스크 파일 경로 지정
image_path = "input.jpg"
mask_path = "mask.png"
output_path = "output.png"

# 마스킹 적용
apply_mask(image_path, mask_path, output_path)

이 예제에서는 apply_mask 함수를 사용하여 이미지에 마스킹을 적용합니다. 이미지와 마스크 이미지는 Image.open 함수로 로드한 후, 각각의 배열 형태로 변환합니다. 이후 numpy를 사용하여 마스킹을 적용하고, 결과 이미지를 저장합니다.

위의 코드에서 image_path, mask_path, output_path를 원하는 이미지 파일 경로와 마스크 파일 경로로 변경한 후에 실행하면, 마스크를 적용한 결과 이미지가 output.png 파일로 저장됩니다.

마스킹을 사용하여 이미지에서 객체를 없앨 수 있습니다. 이를 이용하여 다양한 이미지 처리 작업을 수행할 수 있습니다.

참고 자료