Threshold에 대해서 이미 OpenCV 5.임계처리에서 설명을 하였는데 자료를 정리 하다가 조금 다른 방법으로 다시 정리해 보았습니다.
cv2.threshold(src, thresh, maxval, type[, dst]) → retval, dst
Parameter |
설명 |
src |
입력 이미지 : single-channel, 8-bit or 32-bit floating point(input array) |
thresh |
threshold value(임계 값) |
maxval |
임계값을 |
type |
thresholding type - cv2.THRESH_BINARY : 픽셀이 thresh 보다 크면 maxval, 작으면 0 - cv2.THRESH_BINARY_INV : 픽셀이 thresh 보다 작으면 0, 크면 maxval - cv2.THRESH_TRUNC : 픽셀이 thresh 보다 크면 maxval, 작으면 변경 없음 - cv2.THRESH_TOZERO : 픽셀이 thresh 보다 크면 변경 없음, 작으면 0 - cv2.THRESH_TOZERO_INV : 픽셀이 thresh 보다 크면 0, 작으면 변경 없음 |
dst |
output array : src와 동일 size |
threshold는 이미지를 grayscale로 불러와 픽셀 하나하나를 기준 값과 비교하여 기준 값을 초과하는 경우와 미달하는 경우로 나누어 새로운 값으로 설정 합니다. 예를 들어 커트라인을 90으로 설정 했다고 하면 하나의 픽셀 값을 가져와 90하고 비교해서 크면 A 값, 작으면 B 값으로 다시 설정하는 이분법적 방법으로 색상을 새로 설정 하게 됩니다. 이렇게 하면 특정 값 이하를 제거 하거나 특정 값 이상을 제거할 수 있겠죠.
import cv2 import numpy as np from matplotlib import pyplot as plt
img = cv2.imread('D:/tensorflow/images/mickey.jpg', cv2.IMREAD_GRAYSCALE)
ret, thresh1 = cv2.threshold(img,99,255, cv2.THRESH_TRUNC) ret, thresh2 = cv2.threshold(thresh1, 49,255, cv2.THRESH_TRUNC)
titles =['Original','TRUNC 99','TRUNC 49'] images = [img,thresh1,thresh2]
for i in range(3): plt.imshow(images[i], 'gray') plt.title(titles[i]) plt.show() |
이 프로그램은 이미지를 하나 가져와 픽셀이 99보다 크면 255(흰색)으로 설정하고 설정된 그림을 다시 45보다 큰 값을 가지면 255(흰색)로 설정하는 프로그램 입니다. 실제 적용한 이미지를 가지고 설명을 하면
미키마우스 이미지에 바탕색을 100인 옅은 회색으로 칠하고 거기에 50인 네모를 추가하여 이미지를 하나 만든 후 추가된 색상을 제거해 나가는 방식으로 원본 이미지를 복원하는 작업을 해보았습니다. 이미지에 따라 어떤 thresholding type을 사용할지 선택을 하고 어떤 값을 가진 부분부터 제거해 나갈지 설정을 하여 작업을 해나가면 원하는 이미지를 찾을 수 있습니다.
- copy coding -
'Tensorflow > OpenCV' 카테고리의 다른 글
[OpenCV] Android Studio에서 OpenCV 개발 환경 설정 (0) | 2023.06.06 |
---|---|
OpenCV 7. Contours 이미지 윤곽선 검출 (0) | 2020.11.27 |
OpenCV 6. 히스토그램 (Python) (1) | 2020.10.03 |
OpenCV 이미지 붙이기 (1) | 2019.04.08 |
OpenCV 5. 임계처리 (이진화) (Python) (0) | 2019.04.07 |