[c++] Canny 엣지 검출

Canny 엣지 검출 알고리즘의 핵심 아이디어는 다음과 같습니다:

  1. 가우시안 필터링: 가우시안 필터를 사용하여 입력 이미지를 부드럽게 만듭니다. 이것은 잡음을 줄이고 윤곽을 부드럽게 만들어줍니다.
  2. 그레이디언트의 계산: 이미지에서 경사의 강도 및 방향을 계산합니다. 일반적으로 소벨 필터를 사용하여 x 및 y 방향의 변화를 감지합니다.
  3. 비최대 억제: 이미지를 스캔하여 주변 픽셀보다 경사가 큰 지점을 찾고, 이러한 점이 엣지인지를 결정합니다.
  4. 이중 임계값 처리: 엣지 후보 픽셀을 여러 임계값에 따라 강한 엣지, 약한 엣지, 또는 배경으로 분류합니다.
  5. 엣지 추적: 약한 엣지 픽셀을 강한 엣지에 연결하여 완전한 엣지를 형성합니다.

Canny 엣지 검출은 엣지를 정확하게 검출하면서도 잡음에 민감하지 않다는 특징을 가지고 있습니다. 따라서 깨끗한 이미지에서 정확한 엣지 검출을 수행할 수 있습니다.

C++에서 OpenCV를 사용하여 Canny 엣지 검출을 수행하는 예시 코드는 다음과 같습니다:

#include <opencv2/opencv.hpp>

int main() {
    cv::Mat inputImage = cv::imread("input.jpg", cv::IMREAD_GRAYSCALE);
    if (inputImage.empty()) {
        std::cerr << "Error: Could not read the image." << std::endl;
        return -1;
    }

    cv::Mat edges;
    cv::Canny(inputImage, edges, 100, 200);

    cv::imshow("Canny Edge Detection", edges);
    cv::waitKey(0);

    return 0;
}

위의 예시 코드는 OpenCV 라이브러리를 사용하여 cv::Canny 함수를 호출하여 Canny 엣지 검출을 수행합니다. 이 코드는 input.jpg 파일을 그레이스케일로 읽고, edges라는 Mat 객체에 엣지를 저장한 후, 엣지를 디스플레이합니다.

더 많은 정보를 얻고 싶다면 아래 참고 자료를 참조하세요:

  1. Canny 엣지 검출: https://en.wikipedia.org/wiki/Canny_edge_detector
  2. OpenCV 공식 문서: https://docs.opencv.org/master/da/d5c/tutorial_canny_detector.html
  3. “Computer Vision: Algorithms and Applications” by Richard Szeliski (Springer, 2010) ```