자율주행

🛣️ Day 14: 차선 검출 실습 (OpenCV)

Tech Knowledge Note 2025. 9. 10. 21:00
반응형

안녕하세요! ✨
앞서 Day 13에서는 영상 처리 기초 (Canny Edge, Hough Transform) 를 통해 윤곽선 검출과 직선 검출 원리를 배웠습니다.
오늘은 이를 실제 도로 영상에 적용하여 차선(Lane) 검출 실습을 해보겠습니다.

차선 검출 실습 (OpenCV)


🔍 차선 검출의 개념

자율주행차에서 차선 검출은 주행 경로 인식과 안전 운행에 필수적인 요소입니다.
일반적으로 다음 과정을 거칩니다.

  1. ROI 설정 (Region of Interest): 도로 영역만 추출
  2. Canny Edge Detection: 윤곽선 검출
  3. Hough Transform: 차선 직선 검출
  4. 직선 분류: 왼쪽 차선 vs 오른쪽 차선 구분
  5. 시각화: 원본 이미지에 차선을 표시

⚙️ OpenCV 차선 검출 코드

python 
 
import cv2
import numpy as np

# 영상 불러오기
img = cv2.imread('road.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 가우시안 블러 + Canny Edge
blur = cv2.GaussianBlur(gray, (5, 5), 0)
edges = cv2.Canny(blur, 50, 150)

# ROI (삼각형 영역 선택)
height, width = edges.shape
mask = np.zeros_like(edges)
polygon = np.array([[
    (0, height),
    (width, height),
    (int(width/2), int(height*0.6))
]], np.int32)
cv2.fillPoly(mask, polygon, 255)
roi = cv2.bitwise_and(edges, mask)

# Hough Transform 직선 검출
lines = cv2.HoughLinesP(roi, 1, np.pi/180, 50, minLineLength=100, maxLineGap=50)

# 차선 그리기
line_img = np.copy(img)
if lines is not None:
    for line in lines:
        x1, y1, x2, y2 = line[0]
        cv2.line(line_img, (x1, y1), (x2, y2), (0, 0, 255), 3)

# 결과 출력
cv2.imshow('Original', img)
cv2.imshow('Lane Detection', line_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

🛠 코드 설명

  • Canny Edge: 도로 경계선 검출
  • ROI 설정: 차선이 위치할 가능성이 높은 영역만 필터링
  • HoughLinesP: 확률적 허프 변환으로 직선 검출
  • 결과: 원본 도로 영상 위에 차선 직선이 그려짐

🚘 자율주행에서 차선 검출 활용

  • 차선 유지 지원(Lane Keeping Assist)
  • 차선 이탈 경고(Lane Departure Warning)
  • 고속도로 주행 보조 시스템(HDA, Highway Driving Assist)

👉 최근에는 딥러닝 기반 차선 인식(YOLO, SCNN 등)도 활용되지만, OpenCV 기초 알고리즘은 여전히 빠르고 가벼운 실습용으로 많이 쓰입니다.


📌 정리

  • 차선 검출은 Canny + Hough Transform 조합으로 쉽게 구현 가능
  • ROI 설정이 정확도를 크게 좌우
  • 자율주행의 핵심 안전 기능에 직접 연결되는 기술
반응형

🚀 다음 글 예고

다음 글에서는 [Day 15: 객체 검출 기본 (Haar Cascade, HOG + SVM)] 을 다룹니다.
보행자, 차량, 신호등 등을 검출하는 기본 알고리즘을 학습해보겠습니다.


✅ 오늘 글이 도움이 되셨다면 좋아요와 공유 부탁드립니다.


반응형