본문 바로가기

Robot/Robot Program - ROS

Python에서 OpenCV로 Canny Detection을 이용하는 차선 인식

세상에는 고수가 많고, 그 많은 고수들중 또 많은 분들이 친절(^^)합니다. 요즘은 그 많은 친절한 고수분들의 설명을 따라하는 것 만으로도 참~ 즐거운 공부가 됩니다. 오늘은.. (제가 맨날하는) 또 따라하기 입니다.ㅠㅠ. 오늘은 Simple Lane Detection wth OpenCV라는 글을 따라해보려고 합니다. 단순 따라하기 일 뿐이이서 코드는 그냥 캡쳐해서 봅니다. 긁어서(^^) 사용하고 싶으신 분들은 원작 글로 가시면 됩니다^^ 그리고 이 방법은 딥러닝 등의 방법은 아닙니다. 그래서 요즘 나오는 자율 주행으로 연결하기는 조금 어렵지만, 라인트레이싱을 영상으로 해보겠다~ 정도는 커버될 것 같네요^^

필요한 모듈을 읽고, 데이터도 읽습니다.

읽은 결과는 위 그림입니다. 그냥 차선이 있는 일반적인 도로^^

gray로 살짝 바꿔주겠습니다. matplotlib와 opencv는 rgb, bgr 이렇게 색상 순서가 달라서 plt.imshow 부분에 cmap으로 gray를 잡아주면 푸르딩딩한 사진을 안보게 됩니다.

이렇게요~~~

이제 가우시안 블러~ 처리를 하구요.

그리고 canny edge detection을 적용합니다. 케니 알고리즘은 위키에서도 꽤 잘 나타나는 모양인데, 요즘은 복잡한 알고리즘 공부하기 싫고 이렇게 잘 되는 코드 따라하고 싶어서 그냥 패~스합니다.

우와~ 괜찮네요^^ 그런데 저렇게 edge만 따도 어느게 차선이고 아니다를 알려주기는 어렵습니다. 그래서 관심 영역을 재설정하려고 합니다.

이제.. 이렇게 해서 사진과 같은 크기로 까망색으로 채워줍니다.

여기에서 카메라로 봤을때 가장 관심을 가질 만한 영역을 잡아줍니다.

테스트삼아 이렇게 해서 보면

요렇게 되는 거죠. 저 하얀 부분에 들어온 그림만 대상으로 선을 찾겠다는 뜻 입니다.

그걸 함수로 ~

그리고, 관심 영역을 vertices에 저장하고 반영합니다.

와우~~~

이제 직접 선을 그리는 함수를 만들어 둡니다. 선을 그리는 함수로 HoughLinesP를 이용합니다.

이제~~ 선을 그려보면

이렇게 보입니다. 와우~

그리고 원본 사진에 선을 덮도록 합니다.

ㅎㅎ 멋지네요. 이런 멋진 코드와 설명을 공유해 주다니.. 요즘은 참 공부하기 즐거운 시대입니다.^^

반응형