본문 바로가기
카테고리 없음

OpenCV로 파이썬을 이용한 영상 이진화 기법 5가지 소개

by 업부업과 함께 2025. 4. 3.

 

반응형
OpenCV로 파이썬을 이용한 영상 이진화 기법 5가지 소개

영상 처리 분야에서 이진화는 중요한 기법 중 하나입니다. 이진화는 이미지를 두 가지 색으로 변환하는 과정으로, 다양한 응용 분야에서 사용됩니다. OpenCV파이썬을 이용하면 손쉽게 이진화 기법을 적용할 수 있습니다. 이번 포스트에서는 OpenCV의 다양한 이진화 기법을 소개하고, 실용적인 팁과 사례를 제공하겠습니다.

영상 이진화 기법 1: 고정 임계값 이진화 (Thresholding)

고정 임계값 이진화는 가장 기본적인 이진화 기법입니다. 특정 임계값을 설정하고, 그 값보다 큰 픽셀은 흰색, 작은 픽셀은 검은색으로 변환합니다. 이 기법은 조명이 일정한 환경에서 효과적입니다.

예제 코드:

    import cv2
    import numpy as np

    # 이미지 읽기
    image = cv2.imread('image.jpg', 0)
    # 고정 임계값 설정
    _, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
    # 결과 출력
    cv2.imshow('Binary Image', binary_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

영상 이진화 기법 2: Otsu의 이진화 (Otsu's Thresholding)

Otsu의 이진화 기법은 이미지의 히스토그램을 분석하여 최적의 임계값을 자동으로 결정합니다. 이 기법은 다양한 조명 조건에서도 효과적입니다. Otsu의 방법은 이진화 정확도를 높이는 데 유용합니다.

예제 코드:

    import cv2

    # 이미지 읽기
    image = cv2.imread('image.jpg', 0)
    # Otsu의 이진화 적용
    _, binary_image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    # 결과 출력
    cv2.imshow('Binary Image', binary_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

영상 이진화 기법 3: 적응형 이진화 (Adaptive Thresholding)

적응형 이진화는 이미지의 각 부분에서 임계값을 다르게 설정하는 기법입니다. 이 방법은 조명이 불균형한 이미지에서 특히 유용합니다. 주변 픽셀의 평균값이나 가중 평균을 사용해 임계값을 결정합니다.

예제 코드:

    import cv2

    # 이미지 읽기
    image = cv2.imread('image.jpg', 0)
    # 적응형 이진화 적용
    binary_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
                                         cv2.THRESH_BINARY, 11, 2)
    # 결과 출력
    cv2.imshow('Binary Image', binary_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

영상 이진화 기법 4: 색상 기반 이진화 (Color-based Thresholding)

색상 기반 이진화는 특정 색상 범위를 설정하여 그 범위에 해당하는 픽셀만을 이진화하는 방법입니다. 예를 들어, 특정 색상(예: 빨강, 초록 등)을 검출하고자 할 때 유용합니다.

예제 코드:

    import cv2
    import numpy as np

    # 이미지 읽기
    image = cv2.imread('image.jpg')
    # 색상 범위 설정 (예: 빨강)
    lower_red = np.array([0, 0, 100])
    upper_red = np.array([100, 100, 255])
    mask = cv2.inRange(image, lower_red, upper_red)
    # 결과 출력
    cv2.imshow('Binary Image', mask)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

영상 이진화 기법 5: 노이즈 제거 후 이진화 (Denoising Before Thresholding)

이진화 전에 노이즈를 제거하는 것은 결과의 품질을 높이는 데 매우 중요합니다. Gaussian Blur와 같은 필터링 기법을 사용하여 이미지를 부드럽게 한 후 이진화를 적용합니다.

예제 코드:

    import cv2

    # 이미지 읽기
    image = cv2.imread('image.jpg', 0)
    # Gaussian Blur 적용
    blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
    # Otsu의 이진화 적용
    _, binary_image = cv2.threshold(blurred_image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    # 결과 출력
    cv2.imshow('Binary Image', binary_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

사례 연구

사례 사용 기법 설명
문서 스캔 고정 임계값 이진화 문서의 텍스트를 강조하기 위해 고정 임계값 이진화를 사용하여 배경을 제거.
얼굴 인식 Otsu의 이진화 얼굴 인식에서 다양한 조명 조건 하에서도 적절한 이진화를 통해 인식률 향상.
의료 영상 처리 적응형 이진화 의료 영상에서 병변을 강조하기 위해 적응형 이진화를 사용하여 진단 보조.

실용적인 팁

팁 1: 조명 조건 고려하기

영상 이진화를 수행할 때 조명 조건을 고려하는 것이 중요합니다. 고정 임계값 이진화는 어두운 환경에서는 잘 작동하지 않기 때문에, Otsu의 방법이나 적응형 이진화를 사용하는 것이 좋습니다.

팁 2: 노이즈 제거하기

이진화 전에 이미지에서 노이즈를 제거하는 것은 결과의 품질을 높이는 데 매우 중요합니다. Gaussian Blur와 같은 필터를 사용하여 이미지를 부드럽게 한 후 이진화를 적용해 보세요.

팁 3: 다양한 임계값 실험하기

어떤 임계값이 가장 좋은 결과를 낼지는 각기 다른 이미지마다 다를 수 있습니다. 여러 임계값을 실험하여 최적의 결과를 찾아보세요. 특히 Otsu의 방법을 사용하면 자동으로 최적 임계값을 찾을 수 있습니다.

팁 4: 색상 기반 필터링 활용하기

특정 색상을 강조하고자 할 때는 색상 기반 이진화를 활용하세요. OpenCV에서는 HSV 색상 공간을 사용하여 특정 색상을 쉽게 필터링할 수 있습니다. 이는 물체 인식 및 추적에 유용합니다.

팁 5: 결과 확인 및 조정하기

이진화 결과를 확인하고 필요시 조정하는 것이 중요합니다. 결과가 만족스럽지 않다면, 필터링 기법이나 임계값을 조정하여 최적화해 보세요. 이 과정은 반복적인 실험이 필요할 수 있습니다.

요약 및 실천 팁


OpenCV를 이용한 영상 이진화 기법은 다양한 방법이 있으며, 각 기법마다 장단점이 있습니다. 고정 임계값, Otsu의 이진화, 적응형 이진화, 색상 기반 이진화, 노이즈 제거 후 이진화를 통해 원하는 결과를 얻을 수 있습니다. 이미지를 다룰 때는 항상 조명 조건과 노이즈 상황을 고려하고, 실험을 통해 최적의 방법을 찾아야 합니다. 이러한 기법을 활용하여 여러분의 영상 처리 프로젝트에 적용해 보세요!

반응형