gray=cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU )[1]
이진화 처리는 간단하지만, 쉽지 않은 문제를 가지고 있다.
이진화란 영상을 흑/백으로 분류하여 처리하는 것을 말합니다.
이때 기준이 되는 임계값을 어떻게 결정할 것인지가 중요한 문제가 됩니다.
임계값보다 크면 백, 작으면 흑이 됩니다.
기본 임계처리는 사용자가 고정된 임계값을 결정하고 그 결과를 보여주는 단순한 형태입니다.
이때 사용하는 함수가 cv2.threshold() 입니다.
cv2.threshold(src, thresh, maxval, type) → retval, dst
Parameters:
src – input image로 single-channel 이미지.(grayscale 이미지)
thresh – 임계값
maxval – 임계값을 넘었을 때 적용할 value
type – thresholding type
thresholding type은 아래와 같습니다.
cv2.THRESH_BINARY
cv2.THRESH_BINARY_INV
cv2.THRESH_TRUNC
cv2.THRESH_TOZERO
cv2.THRESH_TOZERO_INV
아래 예제는 각 type별 thresholding 결과입니다.
Sample Code
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('gradient.jpg',0)
ret, thresh1 = cv2.threshold(img,127,255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(img,127,255, cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(img,127,255, cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(img,127,255, cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(img,127,255, cv2.THRESH_TOZERO_INV)
titles =['Original','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images = [img,thresh1,thresh2,thresh3,thresh4,thresh5]
for i in xrange(6):
plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()
여러 이미지를 하나의 화면에 보여줄때 plt.subplot() 함수를 사용합니다. 사용법은 위 소스나 Matplotlib Document를 참고하시기 바랍니다.
https://opencv-python.readthedocs.io/en/latest/doc/09.imageThresholding/imageThresholding.html
'여러이야기 > IT' 카테고리의 다른 글
파이썬 2차배열 내용을 json 파일에 저장, 읽기(230225) (0) | 2023.02.26 |
---|---|
파이썬 직열화(Serialization), 역직열화(Deserialization)란? (0) | 2023.02.20 |
파이썬 openCV 색상 공간 변환(Convert Color)Permalink (0) | 2023.02.02 |
ESP-12E, ESP8266 NodeMCU 설치 및 Blink 구현 (0) | 2020.07.14 |
토양 수분 센서, YL-69, 20.05.03 (0) | 2020.05.04 |