close_btn
로그인, 회원가입후 더 많은 혜택을 누리세요 로그인 회원가입 닫기

wWemNND1CAYb9Y4WQpB-LLi6kuR9wXOIgpVdG0TW

 

 

1. 입력 영상 Grayscale로 변환

   - 카메라를 통해 입력된 영상 값을 Grayscale로 변환한다.

   - http://cinema4dr12.tistory.com/942 

   - cv::cvtColor( image, gray, CV_BGR2GRAY );

     칼라 이미지 image를 흑백 이미지 gray로 변환한다.

 

2. Gaussian Blur 필터를 적용

   - 흑백이미지로 변환 후에 영상에서 고주파 성분을 제거 한다.

   - http://opencv-python.readthedocs.io/en/latest/doc/11.imageSmoothing/imageSmoothing.html

   - dst2 = cv2.GaussianBlur(img,(5,5),0)

 

3. Canny 알고리즘

   - 필터링 된 영상에 Open CV 내장 라이브러리인 Canny 알고리즘을 적용하여 에지로 판단된 부분만 필터링한다.

   - http://poorman.tistory.com/169

    영상에서 사각형 혹은 숫자 등의 물체를 인식할 때 형상의 테두리로 알 수 있다.

    이미지를 그레이 이미지로 변환한 후 가장자리 검출 알고리즘을 이용하여 이미지를 이진화 하는 방법에 대해 정리한다.

 

 

4. HoughLinesP 함수를 이용하여 차선으로 예상되는 선을 검출

  - Canny 알고리즘을 통해 이진화 된 영상을 사용, HoughLinesP 함수를 이용하여 차선으로 예상되는 선을 검출한다.

    (Houghlines 함수를 이용할 수 있었으나 모든 픽셀에 대한 계산을 하여 비효율성을 보이기 때문에 

     HoughLinesP 함수 이용)

  http://opencv-python.readthedocs.io/en/latest/doc/25.imageHoughLineTransform/imageHoughLineTransform.html

  https://m.blog.naver.com/PostView.nhn?blogId=samsjang&logNo=220588392347&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F  

 

 
import cv2
import numpy as np

img = cv2.imread('images\hough_images.jpg')
edges = cv2.Canny(img,50,200,apertureSize = 3)
gray = cv2.cvtColor(edges,cv2.COLOR_GRAY2BGR)
minLineLength = 100
maxLineGap = 0

lines = cv2.HoughLinesP(edges,1,np.pi/360,100,minLineLength,maxLineGap)
for i in xrange(len(lines)):
    for x1,y1,x2,y2 in lines[i]:
        cv2.line(img,(x1,y1),(x2,y2),(0,0,255),3)


cv2.imshow('img1',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

5. 좌우 차선 구분

- 검출된 선을 각도에 따라 좌, 우측 차선으로 구분하여 최종적인 차선 검출

 

6. 좌우 차선의 중앙값을 기반으로 차량 주행

좌, 우측 차선의 중앙값을 기반으로 차량 주행을 한다.