Python OpenCV 강좌 : 제 12강 - 이진화

Python OpenCV Binary

Python OpenCV 강좌 : 제 12강 - 이진화
[ Python-OpenCV ] - 윤대희

이진화(Binary)


1

이진화(Binary)는 어느 지점을 기준으로 값이 높거나 낮은 픽셀의 값을 대상으로 특정 연산을 수행할 때 사용합니다.

일반적으로 값이 높거나 낮은 픽셀을 검은색 또는 흰색의 값으로 변경합니다.

기준값에 따라 이분법적으로 구분해 픽셀을 참 또는 거짓으로 나누는 연산이며, 이미지 행렬에서 모든 픽셀에 대해 연산이 수행됩니다.



Main Code


import cv2

src = cv2.imread("Image/geese.jpg", cv2.IMREAD_COLOR)

gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
ret, dst = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY)

cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()



Detailed Code


gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
ret, dst = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY)

이진화 함수(cv2.threshold)로 그레이스케일 이미지에 이진화를 적용할 수 있습니다.

retval, dst = cv2.threshold(src, thresh, maxval, type)입력 이미지(src)임곗값 형식(type)에 따라 임곗값(thresh)최댓값(maxval)을 활용하여 설정 임곗값(retval)결과 이미지(dst)를 반환합니다.

입력 이미지는 단일 채널 이미지(그레이스케일)을 입력해 사용합니다.

임곗값 형식임곗값을 초과한 값은 최댓값으로 변경하고 임곗값 이하의 값은 0으로 바꾸는 등의 연산을 적용합니다.

설정 임곗값은 일반적으로 임곗값과 동일하지만, 임곗값을 대신 계산해주는 알고리즘인 OtsuTriangle를 사용한다면, 해당 알고리즘에서 계산해준 임곗값을 알 수 있습니다.

예제에서는 임곗값을 100, 최댓값을 255, 임곗값 형식을 cv2.THRESH_BINARY로 사용하였으므로, 픽셀의 값이 100을 초과하는 경우에는 255의 값으로 변경되며, 100 이하의 값은 0으로 변경됩니다.

수식으로 표현한다면 \(dst = (\ src\ >\ thresh\ )\ ?\ maxval : 0\) 으로 표현할 수 있습니다.


  • Tip : 다중 채널 이미지를 입력 이미지로 사용하였을 때, 각 채널마다 이미지를 분리해 이진화 연산을 적용합니다.



Additional Information


임계값 형식

속성 의미
cv2.THRESH_BINARY dst = (src > thresh) ? maxval : 0
(임곗값을 초과할 경우 maxval, 아닐 경우 0)
cv2.THRESH_BINARY_INV dst = (src > thresh) ? 0 : maxval
(임곗값을 초과할 경우 0, 아닐 경우 maxval)
cv2.THRESH_TRUNC dst = (src > thresh) ? thresh : src
(임곗값을 초과할 경우 thresh, 아닐 경우 변형 없음)
cv2.THRESH_TOZERO dst = (src > thresh) ? src : 0
(임곗값을 초과할 경우 변형 없음, 아닐 경우 0)
cv2.THRESH_TOZERO_INV dst = (src > thresh) ? 0 : src
(임곗값을 초과할 경우 0, 아닐 경우 변형 없음)
cv2.THRESH_MASK 검은색 이미지로 변경(마스크용)
cv2.THRESH_OTSU 오츠 알고리즘 적용(단일 채널 이미지에만 적용 가능)
cv2.THRESH_TRIANGLE 삼각형(Triangle) 알고리즘 적용(단일 채널 이미지에만 적용 가능)



Result


2



Book Image

개정판이 출간됐습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍 (개정판)

컴퓨터 비전 기초 이론부터 머신러닝을 활용한 영상 처리 프로젝트까지

  • C#과 파이썬용 OpenCV의 데이터 형식과 행렬 및 배열 연산
  • 이미지/동영상/카메라를 활용한 입출력과 결과 저장
  • 전처리 과정과 정보를 탐색하기 위한 이미지 변형
  • 유의미한 정보를 검출하기 위한 이미지 변환
  • 이미지에서 정보를 검출 및 인식
  • 객체 검출을 포함한 모션 추적
  • K-means, KNN, SVM 등의 머신러닝 알고리즘 적용 방법
  • 카페(Caffe), 다크넷(Darknet), 텐서플로 모델을 활용한 딥러닝 모듈 적용 방법
  • Tesseract-OCR과 C# OpenCvSharp4를 활용한 프로젝트
  • 텐서플로와 Python OpenCV4를 활용한 프로젝트
  • 윤대희 저 | 위키북스

    [yes24 바로가기] [알라딘 바로가기] [교보문고 바로가기]

    후원하기


    ⤧  Previous post Python OpenCV 강좌 : 제 11강 - 역상 ⤧  Next post Python OpenCV 강좌 : 제 13강 - 흐림 효과
    Python-OpenCV Category