본문 바로가기
실전 개발 노트/개발 가이드

객체 검출 완전정리: OpenCV 에지·템플릿 매칭부터 YOLO·Faster R-CNN까지

by 쑥쑥자라나라 2026. 7. 30.
728x90

사진에서 윤곽선을 찾는 일, 객체의 위치와 종류를 찾는 일, 영상에서 같은 객체의 이동을 이어 보는 일은 서로 다르다. 이미지 처리 → 객체 검출 → 객체 추적을 구분하면 OpenCV의 전통 기법과 YOLO·Faster R-CNN 같은 학습 모델을 어디에 써야 하는지 보인다.

이 글의 목표: Canny·Hough·템플릿 매칭의 역할부터 1단계·2단계 검출 모델, NMS, IoU, 추적 ID까지 실전 영상 파이프라인으로 연결한다.

겹친 상자의 중복 박스를 제거하고 프레임이 바뀌어도 같은 추적 ID를 유지하는 현장

1. 검출과 추적은 답하는 질문이 다르다

단계답하는 질문출력 예시
이미지 처리경계·색·모양은 어디에 있나?에지 맵, 이진 이미지, 외곽선
객체 검출무엇이 어디에 있나?클래스, 신뢰도, 바운딩 박스
객체 추적이전 프레임의 객체와 같은가?객체별 고유 ID와 이동 경로

얼굴 검출기는 매 프레임 얼굴 위치를 찾지만, 그 얼굴이 앞 프레임의 누구와 같은지는 알지 못한다. 추적기는 위치와 특징을 이용해 프레임 사이의 객체를 연결하고 ID를 유지한다. 따라서 “얼굴을 찾았다”만으로 객체 추적이 완성되지는 않는다.

프레임 입력에서 검출·중복 제거·추적 ID·이벤트 기록으로 이어지는 영상 처리 흐름

2. OpenCV 전통 기법은 조건이 명확할 때 강하다

Sobel과 Canny: 밝기 변화로 경계 찾기

Sobel은 가로·세로 방향의 밝기 변화량을 계산한다. Canny는 블러, 기울기 계산, 비최대 억제, 이중 임계값 연결을 거쳐 얇고 이어진 에지를 만든다. 조명과 배경이 일정한 문서, 차선, 부품 윤곽을 찾을 때 유용하다.

Hough 변환: 에지 점에서 선과 원 찾기

Hough Line은 여러 에지 점이 지지하는 직선 매개변수를 찾고, Hough Circle은 중심과 반지름 후보를 누적한다. 영수증 테두리나 계기판 원처럼 기하 형태가 분명한 문제에 적합하다.

Template Matching: 같은 모양의 위치 찾기

작은 템플릿을 이미지 위에서 이동하며 유사도를 계산한다. 크기와 회전, 조명이 크게 바뀌지 않는 아이콘이나 고정 UI 검사에 단순하고 빠르다. TM_CCOEFF_NORMED를 포함한 어떤 비교 방식도 항상 최선은 아니다. 실제 영상 조건에서 임계값과 오탐을 확인한다.

Haar와 HOG: 사람이 설계한 특징

Haar Cascade는 밝고 어두운 사각 패턴을 단계적으로 검사하고, HOG는 셀 단위 기울기 방향 분포를 특징으로 만든다. 가벼운 고정 환경에서는 쓸 수 있지만 자세·가림·배경 변화가 크면 학습 기반 검출 모델이 더 안정적인 경우가 많다.

선택 기준: 규칙이 명확하고 환경을 통제할 수 있으면 전통 기법이 빠르고 설명하기 쉽다. 대상의 모양과 배경 변화가 크면 라벨 데이터로 학습한 검출 모델을 검토한다.

3. 객체 검출 모델은 박스·클래스·신뢰도를 낸다

학습 기반 검출 모델은 이미지 한 장에서 여러 객체를 동시에 찾는다. 각 후보는 보통 (x1, y1, x2, y2) 박스 좌표, 클래스, 신뢰도 점수로 표현된다. 신뢰도 임계값을 높이면 오탐이 줄지만 놓치는 객체가 늘 수 있다.

모델의 출력 좌표가 원본 이미지 기준인지, 입력 크기로 정규화된 값인지 확인해야 한다. 모델 입력에 레터박스 패딩을 적용했다면 원본 화면에 그릴 때 스케일과 패딩을 되돌린다.

728x90

4. IoU와 NMS가 중복 박스를 정리한다

IoU는 두 박스가 겹치는 면적을 합집합 면적으로 나눈 값이다. 예측 박스와 정답 박스가 얼마나 잘 맞는지 평가하고, 여러 예측이 같은 객체를 가리키는지 판단하는 데 사용한다.

  1. 클래스별 후보를 신뢰도 순으로 정렬한다.
  2. 가장 높은 후보를 남긴다.
  3. 남긴 후보와 IoU가 임계값보다 큰 중복 후보를 제거한다.
  4. 남은 후보에 같은 과정을 반복한다.

이 과정이 NMS다. 임계값이 너무 낮으면 가까이 붙은 서로 다른 객체까지 지울 수 있고, 너무 높으면 한 객체에 여러 박스가 남는다.

지표의미확인할 점
정밀도검출했다고 한 것 중 실제 객체 비율오탐이 얼마나 적은가
재현율실제 객체 중 찾아낸 비율미탐이 얼마나 적은가
AP한 클래스의 정밀도-재현율 곡선 요약IoU 기준을 함께 표기
mAP여러 클래스 AP의 평균데이터셋·IoU 범위·입력 크기를 함께 비교
지연 시간입력 한 건을 처리하는 시간목표 하드웨어에서 직접 측정

5. 1단계와 2단계 모델은 후보 처리 방식이 다르다

1단계 검출과 2단계 검출이 후보 영역을 처리하는 방식 비교

2단계 검출: 후보 영역을 찾고 다시 분류

Faster R-CNN 계열은 특징 맵에서 객체 후보 영역을 만들고, 각 후보를 분류하며 박스를 보정한다. 후보별 처리가 분리되어 분석하기 좋지만 계산량과 지연 시간이 커질 수 있다.

1단계 검출: 한 흐름에서 클래스와 박스를 예측

YOLO·SSD 계열은 촘촘한 위치에서 클래스와 박스를 직접 예측한다. 실시간 처리가 중요한 영상에서 자주 사용한다. 다만 “1단계는 빠르지만 항상 부정확하다”는 식의 구분은 현재 모델들을 설명하기에 부족하다. 모델 크기, 입력 해상도, 데이터, 후처리, 하드웨어를 같은 조건에서 측정해야 한다.

조건먼저 볼 선택지검증 항목
카메라 실시간 처리작은 1단계 모델목표 장치의 프레임 지연, 작은 객체 재현율
정밀한 분석·오프라인 처리2단계 또는 큰 1단계 모델클래스별 AP와 오류 사례
고정 배경·단순 도형OpenCV 전통 기법조명·크기 변화의 임계값 안정성
도메인 고유 객체전이 학습한 검출 모델라벨 품질, 데이터 분포, 현장 오탐

6. 영상에서는 검출 뒤 추적기를 연결한다

실전 영상 파이프라인은 각 프레임을 독립적으로 검출한 뒤, 추적기가 현재 박스와 기존 트랙을 연결하는 구조다. 위치 변화는 모션 모델로 예측하고, IoU나 시각 특징으로 후보를 매칭한다.

처리 순서: 프레임 읽기 → 크기 조절·정규화 → 객체 검출 → NMS → 추적 ID 연결 → 관심 영역 통과 판단 → 화면 표시·로그 저장

추적기는 잠시 가려진 객체를 몇 프레임 유지할 수 있지만 검출 오류를 완전히 고치지는 못한다. 사람이 겹치는 장면에서는 ID가 바뀔 수 있다. 현장에서는 “몇 프레임까지 미검출을 허용할지”, “관심 영역 경계를 언제 통과한 것으로 볼지”를 업무 규칙으로 정한다.

7. OpenCV로 에지와 직선을 찾는 최소 예제

다음 코드는 문서나 차선처럼 직선 구조가 분명한 이미지에서 Canny 에지와 확률적 Hough 변환을 적용한다. 임계값은 이미지 해상도와 조명에 맞춰 조정한다.

import cv2
import numpy as np

image = cv2.imread("road.jpg")
if image is None:
    raise FileNotFoundError("road.jpg")

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
edges = cv2.Canny(blurred, 60, 160)

lines = cv2.HoughLinesP(
    edges,
    rho=1,
    theta=np.pi / 180,
    threshold=60,
    minLineLength=50,
    maxLineGap=15
)

result = image.copy()
if lines is not None:
    for x1, y1, x2, y2 in lines[:, 0]:
        cv2.line(result, (x1, y1), (x2, y2), (0, 255, 0), 2)

cv2.imwrite("detected_lines.jpg", result)

에지가 너무 많으면 블러를 강화하거나 Canny 임계값을 높인다. 끊어진 선이 하나로 연결되지 않으면 maxLineGap을 조정한다. 검출 결과를 화면으로 확인하며 한 번에 한 매개변수만 바꾸면 원인을 추적하기 쉽다.

8. 모델 선택과 실수 방지 체크리스트

  • 검출과 추적 혼동: 프레임별 박스만 있으면 검출이다. 같은 객체의 ID가 이어져야 추적이다.
  • mAP 숫자만 비교: 데이터셋, IoU 기준, 입력 크기, 모델 크기가 다른 숫자는 직접 비교하지 않는다.
  • 데스크톱 FPS를 현장 성능으로 사용: 배포 장치에서 전처리와 후처리까지 포함해 지연 시간을 측정한다.
  • 신뢰도 임계값 고정: 오탐과 미탐 비용에 맞춰 클래스별 임계값을 검증한다.
  • 모든 문제에 딥러닝 적용: 환경이 고정되고 규칙이 명확하면 전통 기법이 더 단순하고 유지하기 쉽다.
  • 대표 이미지 몇 장만 평가: 야간, 역광, 가림, 작은 객체, 빈 화면을 포함한 오류 묶음으로 검증한다.

핵심 요약

  • Canny·Hough·템플릿 매칭은 형태와 환경이 명확한 문제에 적합하다.
  • 객체 검출은 클래스·신뢰도·박스를, 추적은 프레임 사이의 ID를 만든다.
  • IoU는 박스 겹침을, NMS는 중복 예측 제거를 담당한다.
  • 1단계·2단계라는 이름보다 목표 장치의 정확도와 지연 시간을 직접 비교한다.
  • 실전 파이프라인은 검출 뒤 추적과 업무 이벤트 규칙까지 포함해야 완성된다.
728x90