반응형
안녕하세요! ✨
앞서 Day 13에서는 영상 처리 기초 (Canny Edge, Hough Transform) 를 통해 윤곽선 검출과 직선 검출 원리를 배웠습니다.
오늘은 이를 실제 도로 영상에 적용하여 차선(Lane) 검출 실습을 해보겠습니다.
🔍 차선 검출의 개념
자율주행차에서 차선 검출은 주행 경로 인식과 안전 운행에 필수적인 요소입니다.
일반적으로 다음 과정을 거칩니다.
- ROI 설정 (Region of Interest): 도로 영역만 추출
- Canny Edge Detection: 윤곽선 검출
- Hough Transform: 차선 직선 검출
- 직선 분류: 왼쪽 차선 vs 오른쪽 차선 구분
- 시각화: 원본 이미지에 차선을 표시
⚙️ 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()
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)] 을 다룹니다.
보행자, 차량, 신호등 등을 검출하는 기본 알고리즘을 학습해보겠습니다.
✅ 오늘 글이 도움이 되셨다면 좋아요와 공유 부탁드립니다.
반응형
'자율주행' 카테고리의 다른 글
📡 Day 16: 초음파 센서 원리 및 주차 보조 사례 (0) | 2025.09.12 |
---|---|
👀 Day 15: 객체 검출 기본 (Haar Cascade, HOG + SVM) (0) | 2025.09.11 |
🎥 Day 13: 영상 처리 기초 (Canny Edge, Hough Transform) (0) | 2025.09.09 |
📸 Day 12: 카메라 캘리브레이션 (OpenCV 실습) (0) | 2025.09.08 |
📸 Day 11: 카메라 모델 (Pinhole Camera Model) (0) | 2025.09.07 |