[파이썬] Pillow 이미지의 경계 및 윤곽선 추출하기

이미지 처리는 컴퓨터 비전 및 그래픽 작업에서 중요한 부분입니다. 이미지의 경계와 윤곽선을 추출하는 것은 객체 감지, 텍스트 인식 및 이미지 분할과 같은 다양한 작업에 필수적입니다. Python의 Pillow 라이브러리를 사용하여 이미지에서 경계와 윤곽선을 추출하는 방법에 대해 알아보겠습니다.

Pillow 라이브러리 설치 및 이미지 로딩

먼저, Pillow 라이브러리를 설치해야 합니다. 아래의 명령을 사용하여 Pillow를 설치하세요.

pip install Pillow

이제 다음과 같이 Pillow를 사용하여 이미지를 로딩할 수 있습니다.

from PIL import Image

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

이미지의 경계 추출하기

경계 추출은 이미지 내에서 픽셀 값의 변화를 감지하여 대상 객체의 경계를 식별하는 프로세스입니다. Pillow에서는 filter 모듈의 FIND_EDGES 필터를 사용하여 이미지 경계를 추출할 수 있습니다. 아래의 코드는 이미지에서 경계를 추출하는 예시입니다.

from PIL import ImageFilter

# 이미지 경계 추출
edge_image = image.filter(ImageFilter.FIND_EDGES)

# 이미지 저장
edge_image.save('edge_image.jpg')

위의 코드를 실행하면, FIND_EDGES 필터를 사용하여 경계가 강조된 이미지인 edge_image.jpg가 생성됩니다.

윤곽선 추출하기

윤곽선은 경계에만 관심을 가지는 것이 아니라, 경계 주변의 픽셀을 연결하여 대상 객체의 윤곽선을 형성하는 것입니다. Pillow에서는 Image 객체의 contour() 메서드를 사용하여 이미지의 윤곽선을 추출할 수 있습니다. 아래의 코드는 이미지에서 윤곽선을 추출하는 예시입니다.

from PIL import ImageDraw

# 윤곽선 추출을 위한 이미지 변환
grayscale_image = image.convert('L')

# 이미지 윤곽선 추출
contours = grayscale_image.contour()

# 윤곽선 그리기
contour_image = Image.new('RGBA', image.size, (0, 0, 0, 0))
draw = ImageDraw.Draw(contour_image)
for contour in contours:
    draw.line(contour, fill='red', width=2)

# 이미지 저장
contour_image.save('contour_image.jpg')

위의 코드를 실행하면, L 모드로 이미지를 변환한 후 contour() 메서드를 사용하여 이미지의 윤곽선을 추출합니다. 추출된 윤곽선을 빨간색으로 그려진 이미지인 contour_image.jpg가 생성됩니다.

결론

이미지에서 경계와 윤곽선을 추출하는 것은 이미지 처리의 중요한 단계 중 하나입니다. Python의 Pillow 라이브러리를 활용하여 경계와 윤곽선을 추출하면, 객체 감지, 텍스트 인식 및 이미지 분할과 같은 작업을 보다 쉽게 수행할 수 있습니다. 이번 포스트를 참고하여 Pillow를 사용하여 이미지의 경계와 윤곽선을 추출해 보세요.