이 튜토리얼에서는 OpenCV를 사용하여 이미지에 제로 임계값 처리(Zero Thresholding)를 적용하는 방법을 알아봅니다.
임계값 처리(Thresholding)란 이미지의 각 픽셀 값을 기준값(임계값)과 비교하여 새로운 값으로 변환하는 과정입니다. 픽셀 값이 임계값보다 작으면 특정 값으로, 크면 다른 값으로 설정됩니다.
그중에서도 제로 임계값 처리(cv2.THRESH_TOZERO)는 강도(intensity) 값이 임계값보다 낮은 픽셀을 모두 0으로 만드는 기법입니다. 반대로 임계값보다 높은 픽셀은 원래의 값을 그대로 유지합니다.
원본 이미지

처리 순서
1단계: cv2 모듈을 임포트합니다. 2단계: 임계값(threshold)과 최대값(max_val)을 정의합니다. 3단계: cv2.threshold() 함수에 이 매개변수들을 전달하고, 원하는 임계값 처리 유형을 지정합니다. 4단계: 결과 이미지를 화면에 출력합니다.
예제 코드
import cv2
image = cv2.imread('testimage.jpg')
threshold_value = 120
max_val = 255
ret, image = cv2.threshold(image, threshold_value, max_val, cv2.THRESH_TOZERO)
cv2.imshow('ZeroThresholding', image)
cv2.waitKey(0)
cv2.destroyAllWindows()코드 설명
- threshold_value = 120: 픽셀을 비교할 기준이 되는 임계값입니다.
- max_val = 255: 최대 픽셀 강도 값으로, THRESH_TOZERO 방식에서는 실제로 사용되지 않지만 함수 시그니처상 필요합니다.
- cv2.THRESH_TOZERO: 임계값보다 작은 픽셀은 0(검정색)으로 설정하고, 크거나 같은 픽셀은 원본 값을 유지하는 임계값 처리 유형입니다.
실행 결과
위 코드를 실행하면 강도 값이 120보다 작은 영역이 검정색(0)으로 처리되고, 120 이상인 영역은 원래 밝기를 그대로 유지하는 것을 확인할 수 있습니다.

마무리
제로 임계값 처리는 배경을 제거하거나 특정 밝기 이상의 영역만 추출하고 싶을 때 유용하게 활용됩니다. OpenCV는 THRESH_BINARY, THRESH_TRUNC, THRESH_BINARY_INV 등 다양한 임계값 처리 옵션을 제공하므로, 목적에 맞게 선택하여 사용하시기 바랍니다.