개발 공부
9강 본문
#위 이미지는 코인을 주변가 정확하게 분리해내지 못하고 있다. 조금 더 정확한 이미지 값을 얻기 위해 adaptiveThreshold 함수를 사용하자
import numpy as np
import argparse
import cv2
image = cv2.imread('coin.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(image, (5, 5), 0)
cv2.imshow("Image", image)
#위 함수의 결과를 보면 한가지 문제점이 있습니다. 임계값을 이미지 전체에 적용하여 처리하기 때문에 하나의 이미지에 음영이 다르면 일부 영역이 모두 흰색 또는 검정색으로 보여지게 됩니다.
#이런 문제를 해결하기 위해서 이미지의 작은 영역별로 thresholding을 하는 것입니다. 이때 사용하는 함수가 cv2.adaptiveThreshold() 입니다.
#cv2.adaptiveThreshold(이미지, 최대값,임계값을 계산하는 방식으로 cv2.ADAPTIVE_THRESH_MEAN_C은 주변 평균값으로 한다는 의미, 적용 형식, 적용할 크기, 평균이나 가중치에서 차감할 값)
#많이 어렵죠. 수학에서 공식과 같은 것입니다. 이미 만들어진 것을 값만 필요에 따라 바꾸면 됩니다.
thresh = cv2.adaptiveThreshold(blurred, 255,
cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 11, 4)
cv2.imshow("Mean Thresh", thresh)
#가우시안 방식(정규분포)을 적용해보자.
thresh = cv2.adaptiveThreshold(blurred, 255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 15, 3)
cv2.imshow("Gaussian Thresh", thresh)
cv2.waitKey(0)