이번 튜토리얼에서는 OpenCV에서 제공하는 fillPoly() 함수를 사용하여 채워진 다각형(filled polygon)을 그리는 방법을 알아봅니다. 이 함수는 이미지 객체와 다각형의 꼭짓점 좌표들을 입력으로 받아, 해당 좌표들로 연결된 영역을 지정한 색상으로 꽉 차게 채워줍니다.
fillPoly() 함수란?
cv2.fillPoly()는 하나 이상의 다각형 윤곽선 내부를 채우는 데 사용되는 함수입니다. 주요 매개변수는 다음과 같습니다.
- img: 다각형을 그릴 대상 이미지
- pts: 다각형 꼭짓점 좌표 배열의 목록 (여러 개의 다각형 동시 그리기 가능)
- color: 채우기에 사용할 색상 (BGR 값)
알고리즘
채워진 다각형을 그리는 전체 과정은 다음과 같습니다.
1단계: cv2와 numpy 라이브러리를 임포트한다.
2단계: 다각형의 꼭짓점(엔드포인트) 좌표를 정의한다.
3단계: numpy의 zeros() 함수를 사용해 빈(검은색) 이미지를 생성한다.
4단계: fillPoly() 함수를 호출하여 다각형을 그린다.
5단계: imshow() 함수로 결과 이미지를 화면에 출력한다.
예제 코드
아래 예제에서는 200×200 크기의 검은색 이미지 위에 흰색으로 채워진 사각형 다각형을 그립니다.
import cv2
import numpy as np
# 다각형의 꼭짓점 좌표 정의
contours = np.array([[50, 50], [50, 150], [150, 150], [150, 50]])
# 200x200 크기의 검은색 이미지 생성
image = np.zeros((200, 200))
# 다각형을 흰색으로 채워 그리기
cv2.fillPoly(image, pts=[contours], color=(255, 255, 255))
# 결과 출력
cv2.imshow("filledPolygon", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
참고: 원본 예제에는 창이 즉시 닫히는 문제를 방지하기 위해 cv2.waitKey(0)가 포함되어 있지 않았습니다. 실제 실행 시 이미지 창을 유지하려면 imshow() 호출 후 반드시 waitKey()를 추가하고, 종료 시 destroyAllWindows()로 창을 정리해 주는 것이 좋습니다.
실행 결과
위 코드를 실행하면 검은색 배경 위에 흰색으로 채워진 정사각형 다각형이 표시됩니다.

마무리
fillPoly() 함수는 좌표만 정확히 지정하면 삼각형, 오각형 등 임의의 볼록·오목 다각형도 손쉽게 채울 수 있어, 이미지 마스킹(masking)이나 관심 영역(ROI) 강조 등 다양한 컴퓨터 비전 작업에 널리 활용됩니다.