OpenCV 비전 실무8장 · Threshold, Adaptive Threshold, Otsu3 / 21← 이전목차다음 →MetaContents

8장. Threshold, Adaptive Threshold, Otsu

이진화란

시험 커트라인을 다시 떠올려 봅시다. 학생마다 점수는 37점, 61점, 88점처럼 제각각입니다. 커트라인 60점을 대면 61점과 88점은 "합격", 37점은 "불합격"이 됩니다. 점수의 세세한 차이는 사라지고 두 무리만 남습니다. 대신 "누가 합격했나"는 아주 또렷해집니다.

흑백 그림, 임계값과 견주기, 이진 그림의 세 걸음 흐름도

그림을 왼쪽부터 읽습니다. 흑백 그림의 칸마다 밝기를 임계값과 견줘서, 넘으면 흰색(255), 못 넘으면 검정(0)으로 적습니다. 여기서 학생의 점수가 칸의 밝기이고, 커트라인이 임계값이며, 합격·불합격이 흰색·검정입니다. 비유와 다른 점이 하나 있습니다. 시험은 "60점 이상"이 합격이지만, OpenCV 는 임계값과 같은 값은 넘지 못한 쪽(검정)으로 보냅니다.

부품 그림의 원본과 임계값 127 로 이진화한 BINARY, BINARY_INV 결과

밝은 작업대 위에 어두운 동전, 와셔, 볼트가 놓인 가상의 그림입니다. 임계값 127 로 이진화하면 가운데처럼 부품은 검정, 작업대는 흰색이 됩니다. 오른쪽은 흑백을 뒤집은 결과로, 부품이 흰색입니다. 3장에서 마스크는 "고른 칸은 흰색(255)"이라고 했으므로, 부품을 고르고 싶으면 오른쪽 꼴을 씁니다.

왜 이진화하나

쓰임하는 일이어지는 장
글자만 남기기문서·영수증의 글자를 검정, 종이를 흰색으로문자 인식(OCR)의 앞 단계
물체만 남기기부품, 동전, 세포처럼 바탕과 밝기가 다른 것을 흰색으로넓이·개수 재기
마스크 만들기고른 곳만 255 인 판4장처럼 일부만 세기
다듬기의 재료이진 그림의 잡티를 지우고 구멍을 메우기9장 모폴로지
윤곽선의 재료흰 덩어리의 테두리 찾기12장 윤곽선

짧은 예시

Python
import numpy as np

# 칸 다섯 개의 밝기와 커트라인 127
row = np.array([30, 100, 127, 128, 200])
# 127 보다 크면 255, 아니면 0. np.where(조건, 참일 때, 거짓일 때)
binary = np.where(row > 127, 255, 0)
print(binary.tolist())   # 결과: [0, 0, 0, 255, 255] → 127 은 넘지 못한 쪽

np.where 는 조건이 참인 칸과 거짓인 칸에 다른 값을 넣습니다. 이진화의 뼈대는 이 한 줄입니다. OpenCV 의 함수는 같은 일을 빠르게, 여러 방식으로 해 줍니다.

주의할 점

  • 이진화는 흑백 그림에 합니다. 컬러 그림은 먼저 cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 로 바꾸거나 cv2.IMREAD_GRAYSCALE 로 읽습니다(2장).
  • 이진화하면 밝기의 세세한 차이는 버려집니다. 원본은 지우지 말고 따로 둡니다.
← 이전 절8장 · 용어 짚고 가기다음 절 →8장 · 전역 임계값과 cv2.threshold