OpenCV 임계값
이 튜토리얼은 Python에서 cv2.threshold()
함수를 사용하여 해결합니다.
임계값 기술
Thresholding은 흑백 이미지로 수행되는 이미지 처리 기술로 노이즈를 제거하고 극단 값으로 픽셀을 필터링하는 데 유용합니다. 여기에서는 기존 이미지를 사용하여 일부 임계값을 기반으로 픽셀 값을 조정하여 이진 이미지를 만듭니다.
모든 픽셀 값은 주어진 임계값과 비교됩니다. 값이 임계값보다 작으면 0
으로 설정됩니다. 그렇지 않으면 최대값(255
)으로 설정됩니다.
Python의 OpenCV 라이브러리를 사용하여 컴퓨터 비전 기술을 위해 이미지를 읽고 처리할 수 있습니다. cv2.threshold()
함수를 사용하여 이 라이브러리로 임계값을 수행할 수 있습니다.
OpenCV에서 임계값을 지정하려면 cv.threshold()
함수를 사용하십시오.
cv2.threshold()
함수는 Python의 이미지에 대한 기본 이진 임계값 기술을 구현합니다. 주어진 임계값과의 비교를 기반으로 픽셀 값을 0 또는 최대값으로 바꾸고 처리된 이미지와 함께 임계값을 튜플로 반환합니다.
src
매개변수를 사용하여 처리할 이미지를 제공합니다. 비교를 위한 임계값은 thresh
매개변수를 사용하여 제공됩니다.
maxval
매개변수를 사용하여 최대값을 제공할 수 있습니다. 이는 아래에서 설명하는 임계값 기술의 유형에 따라 사용됩니다.
이 기능과 관련된 주요 매개변수는 type
매개변수입니다. 사용할 이진 임계값 유형을 결정합니다.
type
매개변수는 5개의 값을 허용할 수 있습니다. 첫 번째 유형은 cv2.THRESH_BINARY
이며 임계값보다 작을 때 픽셀 값 0
을 할당하고 더 크면 255
를 할당하여 이진 임계값의 기본을 따릅니다.
예:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
r, t = cv2.threshold(img, 60, 255, cv2.THRESH_BINARY)
cv2.imshow("THRESH_BINARY", t)
cv2.waitKey(0)
cv2.destroyAllWindows()
출력:
위 예제에서 cv2.imread()
함수를 사용하여 이미지를 읽습니다. 그런 다음 cv2.cvtColor()
함수를 사용하여 회색조 이미지로 변환하면 이 프로세스는 다른 유형에서도 동일하게 유지됩니다.
그런 다음 cv2.threshold()
함수를 적용하고 필요한 매개변수를 제공합니다. 임계값은 60
이며 cv2.THRESH_BINARY
기술을 적용합니다. 최종 결과는 cv2.imshow()
기능을 사용하여 창에 표시됩니다.
cv2.waitKey()
및 cv2.destroyAllWindows()
함수는 창이 즉시 닫히는 것을 방지하고 사용자가 아무 키나 누를 때 창을 닫습니다. 다른 유형에 대해 알아보겠습니다.
이전 유형과 반대인 cv2.THRESH_BINARY_INV
유형이 있습니다. 임계값 미만일 때 픽셀에 최대값을 할당하고 0
을 할당합니다.
예:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
r, t = cv2.threshold(img, 60, 255, cv2.THRESH_BINARY_INV)
cv2.imshow("THRESH_BINARY_INV", t)
cv2.waitKey(0)
cv2.destroyAllWindows()
출력:
cv2.threshold()
함수에서 cv2.THRESH_BINARY_INV
유형을 사용하여 임계값 기술을 처리합니다. 절차는 마지막 절차와 유사합니다.
세 번째 유형은 픽셀 값이 임계값을 초과할 때 임계값으로 할당되는 경우 cv2.THRESH_TRUNC
입니다.
임계값보다 작은 모든 픽셀은 동일하게 유지됩니다.
예:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
r, t = cv2.threshold(img, 60, 255, cv2.THRESH_TRUNC)
cv2.imshow("THRESH_TRUNC", t)
cv2.waitKey(0)
cv2.destroyAllWindows()
출력:
Python에서 cv2.threshold()
함수를 사용하여 cv2.THRESH_TRUNC
임계값 기술을 구현합니다.
cv2.THRESH_TOZERO
유형도 있습니다. 임계값보다 작은 모든 픽셀 값은 0으로 변경되고 나머지는 변경되지 않습니다.
예:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
r, t = cv2.threshold(img, 60, 255, cv2.THRESH_TOZERO)
cv2.imshow("THRESH_TOZERO", t)
cv2.waitKey(0)
cv2.destroyAllWindows()
출력:
이전 유형의 역은 cv2.THRESH_TOZERO_INV
유형으로 임계값보다 큰 픽셀 값은 0으로 변경됩니다. 비슷하게 사용할 수 있습니다.
예:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
r, t = cv2.threshold(img, 120, 255, cv2.THRESH_TOZERO_INV)
cv2.imshow("THRESH_TOZERO_INV", t)
cv2.waitKey(0)
cv2.destroyAllWindows()
출력:
결론
이 기사에서는 cv2.threshold()
함수를 사용하여 간단한 임계값 구현에 대해 논의했습니다. 임계값은 일부 임계값과 비교하여 픽셀 값을 변경하는 기술입니다.
cv2.threshold()
함수와 해당 매개변수를 사용하는 방법에 대해 논의했습니다. type
매개변수에 대해 서로 다른 값을 사용하여 가능한 5가지 유형의 임계값이 있습니다.
OpenCV 라이브러리를 사용하여 달성할 수 있는 적응 임계값도 있습니다.
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn