이 글에서는 OpenCV를 사용하여 이미지에 블랙햇(BlackHat) 연산을 적용하는 방법을 알아봅니다. 블랙햇 변환은 형태학적(morphological) 연산 중 하나로, 밝은 배경 속에 있는 어두운 관심 객체를 강조할 때 유용하게 사용됩니다. 구현에는 morphologyEx(image, cv2.MORPH_BLACKHAT, kernel) 함수를 활용합니다.
원본 이미지

알고리즘 단계
블랙햇 연산은 다음 순서로 진행됩니다.
- cv2 모듈을 임포트(import)합니다.
- 대상 이미지를 불러옵니다.
- 커널(kernel)의 크기를 정의합니다.
- 이미지와 커널을
cv2.morphologyEx()함수에 전달합니다. - 연산이 적용된 결과 이미지를 화면에 출력합니다.
예제 코드
import cv2
image = cv2.imread('image_test.jpg')
filter_size = (5,5)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, filter_size)
image = cv2.morphologyEx(image, cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('BlackHat', image)코드 설명
cv2.getStructuringElement() 함수는 지정한 크기와 모양의 구조 요소(structuring element), 즉 커널을 생성합니다. 위 예제에서는 5×5 크기의 사각형(RECT) 커널을 사용했으며, 이 커널이 cv2.morphologyEx() 함수에 전달되어 블랙햇 연산을 수행합니다. 마지막으로 cv2.imshow()를 통해 결과 이미지를 창으로 확인할 수 있습니다.
실행 결과

결과 이미지를 보면 원본에서 밝은 배경보다 어두웠던 영역들이 흰색으로 강조되어 나타나는 것을 확인할 수 있습니다. 이처럼 블랙햇 변환은 조명이 균일하지 않은 환경에서 어두운 결함이나 객체를 검출하는 데 효과적으로 활용됩니다.