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

OpenCV로 이미지 닫기(Closing) 연산 수행하기 – cv2.morphologyEx() 완벽 가이드


이 튜토리얼에서는 OpenCV의 cv2.morphologyEx() 함수를 사용하여 이미지에 닫기(Closing) 연산을 적용하는 방법을 알아봅니다. 닫기 연산은 팽창(Dilation) 후 침식(Erosion)을 순차적으로 수행하는 모폴로지 기법으로, 전경(foreground) 객체 내부의 작은 구멍이나 틈을 메워서 배경의 작은 빈 공간을 전경으로 변환해 줍니다. 또한 이 기법은 이미지 속에서 특정 형태를 검출하는 용도로도 활용할 수 있습니다.

닫기 연산에 사용되는 핵심 함수 시그니처는 다음과 같습니다.

cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
  • image: 연산을 적용할 입력 이미지
  • cv2.MORPH_CLOSE: 닫기 연산임을 지정하는 플래그
  • kernel: 연산의 강도와 방향을 결정하는 커널(구조 요소)

원본 이미지

OpenCV로 이미지 닫기(Closing) 연산 수행하기 – cv2.morphologyEx() 완벽 가이드

알고리즘 단계

1단계: cv2와 numpy 라이브러리를 임포트합니다.
2단계: 처리할 이미지를 불러옵니다.
3단계: 연산에 사용할 커널(kernel)을 정의합니다.
4단계: 이미지와 커널을 cv2.morphologyEx() 함수에 전달합니다.
5단계: 연산이 적용된 결과 이미지를 화면에 출력합니다.

예제 코드

import cv2
import numpy as np

# 이미지 읽기
image = cv2.imread('testimage.jpg')

# 5x5 크기의 커널 정의
kernel = np.ones((5,5), np.uint8)

# 닫기 연산 적용
image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)

# 결과 출력
cv2.imshow('Closing', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

코드 설명: np.ones((5,5), np.uint8)은 5×5 크기의 사각형 커널을 생성합니다. 커널 크기가 클수록 더 넓은 영역의 작은 구멍들이 채워지므로, 이미지의 특성에 맞게 커널 크기를 조절하는 것이 중요합니다. 마지막의 cv2.waitKey(0)는 사용자가 키를 누를 때까지 창을 유지하고, cv2.destroyAllWindows()는 열려 있는 모든 창을 닫아 리소스를 정리합니다.

출력 결과

OpenCV로 이미지 닫기(Closing) 연산 수행하기 – cv2.morphologyEx() 완벽 가이드

결과 이미지를 보면 원본에 있던 작은 구멍들이 메워져 전경 객체가 매끄럽고 하나의 덩어리로 연결된 것을 확인할 수 있습니다. 이처럼 닫기 연산은 노이즈 제거, 객체 영역 통합, 형태 분석 등 다양한 컴퓨터 비전 작업의 전처리 단계에서 유용하게 사용됩니다.