[Python 데이터 분석과 이미지 처리] OpenCV 임계점 처리

뽕칠이·2023년 12월 26일
0

OpenCV 임계점 처리

이미지의 기본 이진화

cv2.threshold(image, thresh, max_value, type) : 임계값을 기준으로 흑/백으로 분류

  • thresh : 임계값
  • max_value : 임계 값을 넘었을 때 적용할 값
  • type : 임계점을 처리하는 방식
    THRESH_BINARY : 임계값보다 크면 max_value, 작으면 0
    THRESH_BINARY_INV : 임계값보다 작으면 max_value, 크면 0
    THRESH_TRUNC : 임계값보다 크면 임계값, 작으면 그대로
    THRESH_TOZERO : 임계값보다 크면 그대로, 작으면 0
    THRESH_TOZERO_INV : 임계값보다 크면 0, 작으면 그대로
image = cv2.imread('black.jpg', cv2.IMREAD_GRAYSCALE)

images = []
# 임계값이 127, 임계값보다 크면 255, 작으면 0
ret, thresh1 = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
# 임계값이 127, 임계값보다 작으면 255, 크면 0
ret, thresh2 = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY_INV)
# 임계값이 127, 임계값보다 크면 임계값, 작으면 0
ret, thresh3 = cv2.threshold(image, 127, 255, cv2.THRESH_TRUNC)
# 임계값이 127, 임계값보다 크면 그대로, 작으면 0
ret, thresh4 = cv2.threshold(image, 127, 255, cv2.THRESH_TOZERO)
# 임계값이 127, 임계값보다 작으면 그대로, 크면 0
ret, thresh5 = cv2.threshold(image, 127, 255, cv2.THRESH_TOZERO_INV)

images.append(thresh1)
images.append(thresh2)
images.append(thresh3)
images.append(thresh4)
images.append(thresh5)

for i in images:
    plt.imshow(cv2.cvtColor(i, cv2.COLOR_BGR2RGB))
    plt.show()

cv2.adaptiveThreshold(image, max_value, adaptive_method, type, block_size, C) : 적응 임계점 처리 함수

하나의 이미지에 여러 개의 조명이 존재할 때 적용하면 유용

  • adaptive_method : 임계값을 결정하는 계산 방법
    ADAPTIVE_THRESH_MEAN_C : 주변 영역의 평균값으로 결정
    ADAPTIVE_THRESH_GAUSSIAN_C : 각 픽셀의 중심마다 거리에 대한 가우시안 가중치로 결정
  • block_size : 임계값을 적용할 영역의 크기
  • 평균이나 가중 평균에서 차감할 값
import cv2
import matplotlib.pyplot as plt

image = cv2.imread('white.jpg', cv2.IMREAD_GRAYSCALE)

ret, thresh1 = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
thresh2 = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 21, 3)

plt.imshow(cv2.cvtColor(image, cv2.COLOR_GRAY2RGB))
plt.show()

plt.imshow(cv2.cvtColor(thresh1, cv2.COLOR_GRAY2RGB))
plt.show()

plt.imshow(cv2.cvtColor(thresh2, cv2.COLOR_GRAY2RGB))
plt.show()



0개의 댓글