Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

OpenCV를 활용한 이미지 윤곽선(Contour) 검출 방법

이번 튜토리얼에서는 OpenCV를 사용해 이미지에서 윤곽선(Contour)을 검출하는 방법을 알아봅니다. 윤곽선이란 색상이나 밝기가 같은 연속된 지점들을 하나의 곡선으로 연결한 것을 의미합니다. 윤곽선은 형태 분석, 객체 검출 및 인식에 매우 유용하게 활용되는 도구입니다.

원본 이미지

OpenCV를 활용한 이미지 윤곽선(Contour) 검출 방법

알고리즘 단계

윤곽선 검출은 다음 순서로 진행됩니다.

  1. OpenCV 라이브러리를 임포트합니다.
  2. matplotlib 라이브러리를 임포트합니다.
  3. 이미지 파일을 읽어옵니다.
  4. BGR 색상 공간을 RGB로 변환합니다.
  5. RGB 이미지를 그레이스케일로 변환합니다.
  6. 그레이스케일 이미지에 임계값 처리(Thresholding)를 적용하여 이진화합니다.
  7. 이진 이미지에서 윤곽선을 찾습니다.
  8. 원본 이미지 위에 윤곽선을 그립니다.
  9. 최종 결과를 화면에 출력합니다.

예제 코드

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('testimage.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

image = cv2.drawContours(image, contours, -1, (0, 255, 0), 2)
plt.imshow(image)
plt.show()

코드 설명

cv2.cvtColor() 함수를 사용해 OpenCV 기본 색상 순서인 BGR을 RGB로 변환한 뒤, 다시 그레이스케일로 바꿉니다. 이후 cv2.threshold()로 픽셀 값을 127을 기준으로 반전 이진화하여 배경과 객체를 분리합니다. cv2.findContours()RETR_TREE 옵션은 모든 윤곽선의 계층 구조를 추출하며, CHAIN_APPROX_SIMPLE은 불필요한 좌표를 압축해 메모리를 절약합니다. 마지막으로 cv2.drawContours()에서 세 번째 인자를 -1로 지정하면 모든 윤곽선을 초록색((0, 255, 0))으로, 두께 2픽셀로 그릴 수 있습니다.

실행 결과

OpenCV를 활용한 이미지 윤곽선(Contour) 검출 방법