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()

 

opencv threshold


이 프로그램은 이미지를 하나 가져와 픽셀이 99보다 크면 255(흰색)으로 설정하고 설정된 그림을 다시 45보다 큰 값을 가지면 255(흰색)로 설정하는 프로그램 입니다.  실제 적용한 이미지를 가지고 설명을 하면


opencv threshold


미키마우스 이미지에 바탕색을 100인 옅은 회색으로 칠하고 거기에 50인 네모를 추가하여 이미지를 하나 만든 후 추가된 색상을 제거해 나가는 방식으로 원본 이미지를 복원하는 작업을 해보았습니다이미지에 따라 어떤 thresholding type을 사용할지 선택을 하고 어떤 값을 가진 부분부터 제거해 나갈지 설정을 하여 작업을 해나가면 원하는 이미지를 찾을 수 있습니다


- copy coding -



+ Recent posts