728x90

'이진화 thresholding'는 그레이 스케일 이미지를 바이너리 이미지로 변환 하는방법입니다.

임계값 threshold를 기준으로 그레이 스케일 이미지를 흰색 영역과 검은색 영역으로 분리합니다.

예를 들어, 임계값이 127일 경우 입력으로 사용한 이미지에서 픽셀값이 127 이하이면 검은색(0)으로 하고,

픽셀값이 127보다 크면 흰색(255)로 하여 바이너리 이미지를 생성합니다.

 

OpenCV 에서는 이미지 전체에 하나의 임계값을 사용하는 threshold함수와 이미지를 작은 영역으로 나누어

각 영역별로 다른 임계값을 사용하는 adaptiveTreshold 함수를 제공합니다.

 

threshold함수는 이미지 전체에 하나의 임계값을 사용하여 이진화를 합니다.

 

 

왼쪽 그라데이션 이미지는 검은색(0)에서 흰색(255) 사이의 색의 변화를 한장의 이미지에 나타낸 것입니다.

임계값 127을 사용하여 threshold함수를 그라데이션 이미지에 적용하면 오른쪽 그림처럼 이미지 중앙을 중심으로

왼쪽은 검은색, 오른쪽은 흰색이 됩니다. 이미지 중앙에 위치한 픽셀값 127을 기준으로 왼쪽은 127 이하의 픽셀값을 가지고, 오른쪽은 127보다 큰 픽셀값을 가지기 때문입니다.

 

import cv2 as cv
import os
import sys

dt_path = os.path.join(os.path.expanduser('~'),'Desktop')
os.chdir(dt_path)

img_color = cv.imread("test.jpg", cv.IMREAD_COLOR)
if img_color is None:
	print("이미지 파일을 읽을 수 없습니다.")
	sys.exit(1)

# 그레이 스케일 이미지로 변환합니다.
img_gray = cv.cvtColor(img_color, cv.COLOR_BGR2GRAY)

# 임계값 127을 사용하여 이진화를 합니다.
# 이진화 타입으로 thresh_binary를 사용하면
# 픽셀값이 127보다 크면 255, 127 이하이면 0이 됩니다.
# 이진화 타입으로 THRESH_BINARY_INV를 사용하면 반대로 됩니다.
retval, img_binary = cv.threshold(img_gray, 127, 255, cv.THRESH_BINARY)

# 결과 이미지를 보여줍니다.
cv.imshow('Grayscale', img_gray)
cv.imshow('Binary', img_binary)
cv.waitKey(0)

 

 

 

728x90