본문 바로가기

IT

OpenCV로 엣지 검출: Canny 알고리즘 설명과 활용

Canny는 단순한 경계 검출이 아니라,

노이즈 제거 → 그라디언트 계산 → 이중 임계값 → 엣지 연결까지 이어지는 정교한 프로세스를 갖고 있어서,

실전 영상 처리에서 굉장히 많이 쓰이는 핵심 알고리즘입니다.

 

OpenCV로 엣지 검출: Canny 알고리즘 설명과 활용

 

 

엣지 검출이란 무엇인가요?

엣지(Edge)는 이미지 내에서 색상이나 밝기의 변화가 급격하게 일어나는 경계선을 의미해요.

엣지를 검출한다는 건 물체의 윤곽, 패턴, 구조를 파악한다는 뜻이고,

이는 객체 인식, 영상 분할, 트래킹 등 고급 컴퓨터 비전 작업의 출발점이 돼요.

다양한 엣지 검출 방법 중에서 Canny 알고리즘은 가장 정밀하고 널리 쓰이는 방식으로 평가받고 있어요.

 

Canny 알고리즘의 작동 원리

Canny 엣지 검출은 총 5단계로 이루어져 있어요:
① 가우시안 블러로 노이즈 제거 →
② Sobel 필터로 그라디언트(기울기) 계산 →
③ 비최대 억제(Non-Maximum Suppression)로 엣지를 얇게 만듦 →
④ 이중 임계값(Double Threshold)으로 강한 엣지/약한 엣지 구분 →
⑤ 히스테리시스(Hysteresis)로 약한 엣지를 강한 엣지와 연결된 경우만 살림.

이 과정을 통해 명확하고 불필요한 노이즈가 제거된 엣지 선만 남기게 돼요,

그래서 정확한 윤곽 검출이 가능해지는 거예요.

 

OpenCV에서 Canny 함수 사용하기

OpenCV에서는 cv::Canny() 함수 하나로 위 과정을 모두 자동으로 처리해줘요.

사용 방법은 매우 간단하고, 핵심은 두 개의 임계값 설정이에요.

 

cv::Mat gray, blurred, edges;
cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY);
cv::GaussianBlur(gray, blurred, cv::Size(5, 5), 1.5);
cv::Canny(blurred, edges, 50, 150);  // 임계값 50과 150

 

 

  • 첫 번째 임계값: 약한 엣지를 판단할 기준
  • 두 번째 임계값: 강한 엣지를 판단할 기준
    이 범위 안에서 연결된 엣지만 최종 엣지로 인정되기 때문에, 임계값 설정이 엣지 품질에 큰 영향을 줘요.

Canny 알고리즘의 활용 사례

Canny는 다양한 분야에서 활용돼요.

예를 들어, 문서 스캔 시 문서의 외곽선 검출, 의료 영상에서 혈관 윤곽 검출,

자율주행 차량에서는 차선 인식에도 쓰여요.

단독으로 쓰기보다는 Canny + Hough Transform 조합으로 선 검출이나 모서리 분석에 자주 사용돼요.

또, Canny로 얻은 엣지를 마스크로 활용하면 물체 분할이나 ROI 지정에도 유용하게 활용할 수 있어요.

튜닝 포인트와 주의할 점

Canny 알고리즘은 민감한 만큼 파라미터 튜닝이 핵심이에요.

특히 GaussianBlur의 커널 크기와 Canny()의 두 임계값은

실험적으로 최적 값을 찾아야 해요.

너무 작은 커널은 노이즈를 제거하지 못하고, 너무 큰 커널은 엣지를 날려버릴 수 있어요.

또한, 조명이 불균일하거나 배경이 복잡한 이미지에선

사전 전처리(히스토그램 평활화 등)를 먼저 해주는 게 좋아요.

실시간 처리에서는 성능 이슈가 있을 수 있으니, 영상 해상도 축소 후

처리하거나 멀티스레딩으로 최적화하는 전략도 필요합니다.

 

이 블로그의 내용을 대화 형식인 음성으로 들으면서 정리하면, 보다 쉽게 이해할 수 있을 거예요.
다운받아 들어보세요~

OpenCV로 엣지 검출 Canny 알고리즘 설명과 활용.mp3
5.32MB