2019. 9. 3. 21:56ㆍ해봤던것들
준비
운영체제 : Windows 10
언어 : Python
파이썬에서 OpenCV를 사용하기 위해 cv2 라이브러리를 설치했습니다.
추가로 numpy 라이브러리도 사용합니다.
보편적으로 아래와 같은 순서를 거쳐 차선을 인식합니다.

하지만 위 순서와는 조금 다르게
HSV 범위 값을 사용해서 색 추출을 활용한 차선 인식을 시도해봤습니다.
HSV 차선 인식
차선 인식을 하기 위해 가장 먼저 차선의 색인 노란색과 흰색의 HSV범위 값이 필요했습니다.
HSV 범위 값 추출은 마우스 이벤트를 활용해 10초 간격, 픽셀 단위로 추출했습니다.
영상의 프레임마다 차선의 명도가 다르기 때문에 단일 값으로 범위를 주지 않고
추출한 값의 최댓값과 최솟값으로 HSV 범위를 지정했습니다.


frame = cv2.GaussianBlur(orig_frame, (5, 5), 0)
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) #hsv로 변환한다.
low_yellow = np.array([18, 94, 140]) #hsv 검출조건이다 H는 18, S는 94, V는 140 부터.
up_yellow = np.array([48, 255, 255]) # H는 48, S는 255, V는 255 까지로한다.
yellowmask = cv2.inRange(hsv, low_yellow, up_yellow) #적용
edges = cv2.Canny(yellowmask, 75, 150) #canny를 사용하여 에지검출
Roiedges = roi(edges, [vertices]) #edges영상에 roi적용
lines = cv2.HoughLinesP(Roiedges, 1, np.pi/180, 50, maxLineGap=50)
위 코드는 아래 작업을 순차적으로 진행합니다.
1. 영상의 프레임을 가우시안 블러 처리
2. 블러된 프레임을 HSV로 변환
3. HSV 범위에 있는 색만 추출
4. 추출된 부분 에지 검출
5. 관심 영역만 잘라내기
6. 확률 허프 변환을 사용해 직선 찾기
이제 직선만 그려주면 차선을 검출할 수 있게 됩니다.
if lines is not None:
for line in lines:
x1, y1, x2, y2 = line[0]
cv2.line(frame, (x1, y1), (x2, y2), (51, 204, 255), 5) #찾은 직선이 보이게 선을 그린다.


직선을 그려준 결과 위와 같이 주황색은 제대로 검출되었지만
흰색은 차선 이외의 것도 검출되는 문제가 있었습니다.
문제 해결을 위해 흰색은 RGB 방법으로 검출해봤습니다.

Yeowoolee/OpenCV-Lane-Detection
Contribute to Yeowoolee/OpenCV-Lane-Detection development by creating an account on GitHub.
github.com