[c++] 이진화와 팽창 및 침식

목차

  1. 이진화 (Binarization)
  2. 팽창 (Dilation)
  3. 침식 (Erosion)
  4. C++ 예제 코드

이진화

이진화란 그레이스케일 이미지를 흑백 이미지로 변환하는 과정을 말합니다. 주어진 임계값 이상이면 1(흰색), 임계값 미만이면 0(검은색)으로 픽셀을 설정하여 처리합니다.

팽창

팽창은 주어진 구조 요소(커널)와 이미지를 스캔하여 커널과 일치하는 부분 중 가장 큰 값으로 이미지를 확장하는 연산입니다. 주변의 밝은 영역을 더 강조시켜 물체를 확대시킵니다.

침식

침식은 팽창과 반대로 작용합니다. 이미지를 스캔하여 커널과 일치하는 부분 중 가장 작은 값으로 이미지를 축소하는 연산입니다. 주변의 어두운 영역을 더 강조하여 작은 구멍을 메꿔줍니다.

C++ 예제 코드

아래는 OpenCV 라이브러리를 사용하여 이미지를 이진화, 팽창, 침식하는 간단한 C++ 코드 예제입니다.

#include <opencv2/opencv.hpp>

int main() {
    // 이미지 로드
    cv::Mat image = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE);
  
    // 이진화
    cv::Mat binaryImage;
    cv::threshold(image, binaryImage, 128, 255, cv::THRESH_BINARY);
  
    // 팽창
    cv::Mat dilatedImage;
    cv::dilate(binaryImage, dilatedImage, cv::Mat());
  
    // 침식
    cv::Mat erodedImage;
    cv::erode(binaryImage, erodedImage, cv::Mat());
  
    // 결과 이미지 저장
    cv::imwrite("binary_output.jpg", binaryImage);
    cv::imwrite("dilated_output.jpg", dilatedImage);
    cv::imwrite("eroded_output.jpg", erodedImage);
  
    return 0;
}

위 코드는 OpenCV 라이브러리를 사용하여 이미지를 이진화, 팽창, 침식하는 간단한 예제입니다. 이미지를 로드하고 필요한 연산을 수행한 후, 결과 이미지를 저장합니다.

지금까지 이진화, 팽창 및 침식에 대해 알아보고, 각각의 사용법을 C++ 예제 코드를 통해 실습해보았습니다. 이러한 이미지 처리 기법은 컴퓨터 비전 및 이미지 분석 분야에서 널리 활용됩니다.

참고 문헌