이진화
- 임계값 이하의 픽셀은 검은색(0)으로, 임계값 이상의 픽셀은 흰색(255)으로 표시
- 이미지를 흑백 이미지로 변환하거나 특정 객체를 강조하는데 사용
import cv2
img = cv2.imread('../OpenCV/book.jpg', cv2.IMREAD_GRAYSCALE)
ret, binary = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
cv2.imshow('img',img)
cv2.imshow('binary', binary)
cv2.waitKey(0)
cv2.destroyAllWindows()
Trackbar
- 사용자 인터페이스에서 숫자 값을 조절할 수 있는 GUI 요소
- 사용자가 값을 조절할 때마다 콜백 함수를 호출하여 해당 값을 실시간으로 반영
import cv2
def empty(pos):
print(pos)
pass
img = cv2.imread('../OpenCV/book.jpg', cv2.IMREAD_GRAYSCALE)
name = 'TrackBar'
cv2.namedWindow(name)
cv2.createTrackbar('threshold', name, 127, 255, empty)
while True:
thresh = cv2.getTrackbarPos('threshold', name)
ret, binary = cv2.threshold(img, thresh,255, cv2.THRESH_BINARY)
if not ret:
break
cv2.imshow(name, binary)
if cv2.waitKey(1)==ord('q'):
break
cv2.destroyAllWindows()
기준에 따라 색 변화
import cv2
img = cv2.imread('../OpenCV/book.jpg', cv2.IMREAD_GRAYSCALE)
ret, binary1 = cv2.threshold(img, 0,255, cv2.THRESH_BINARY)
ret, binary2 = cv2.threshold(img, 127,255, cv2.THRESH_BINARY)
ret, binary3 = cv2.threshold(img, 195,255, cv2.THRESH_BINARY)
cv2.imshow('img',img)
cv2.imshow('binary1', binary1)
cv2.imshow('binary2', binary2)
cv2.imshow('binary3', binary3)
cv2.waitKey(0)
cv2.destroyAllWindows()
Adaptive Threshold
import cv2
def empty(pos):
print(pos)
pass
img = cv2.imread('../OpenCV/book.jpg', cv2.IMREAD_GRAYSCALE)
name = 'TrackBar'
cv2.namedWindow(name)
cv2.createTrackbar('block_size', name, 25, 100, empty)
cv2.createTrackbar('c', name, 3, 10, empty)
while True:
block_size = cv2.getTrackbarPos('block_size', name)
c = cv2.getTrackbarPos('c', name)
if block_size <=1:
block_size = 3
if block_size % 2 ==0:
block_size+=1
binary = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, block_size, c)
cv2.imshow('img', img)
cv2.imshow(name, binary)
if cv2.waitKey(1)==ord('q'):
break
cv2.destroyAllWindows()
오츠 알고리즘
- Bimoadl Image에 사용하기 적합(최적의 임계치를 자동으로 발견)
import cv2
img = cv2.imread('../OpenCV/book.jpg', cv2.IMREAD_GRAYSCALE)
ret, binary = cv2.threshold(img, 127,255, cv2.THRESH_BINARY)
ret, otsu = cv2.threshold(img, -1,255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
print('otsu threshold', ret)
cv2.imshow('img',img)
cv2.imshow('binary', binary)
cv2.imshow('otsu', otsu)
cv2.waitKey(0)
cv2.destroyAllWindows()