2023.10.29 주말 TIL 🫠
차선 인식 프로젝트를 시작했다!! 영상의 이진화를 구현해보았다. c++이 익숙하지 않아서 일단 구현하는 것을 해보고 나중에 정리를 하거나 해야겠다. python이 익숙한 나는 자료형을 지정해주는 것이 익숙하지 않다... 자료형을 잘못써서 에러가 나는 경우가 많았다...ㅎㅎ 공부할 때 함수의 매개변수, 반환값의 자료형이 무엇인지 자세히 봐야할 것 같다!!
🛣 차선 인식 프로젝트
영상 이진화
구현 알고리즘 4가지
- gray scale 영상으로 변환
- histogram equalize
- histogram stretch
- HLS 영상으로 변환 후 L 사용
- histogram equalize
- histogram stretch
- 추가적으로 모폴로지 연산 수행 (진행중이다)
결과
- gray와 hls의 히스토그램 차이는 거의 없다.
- eqaulize과 stretch 수행시간이 각각 0.96ms, 2.79ms로 equlize가 더 빠르다.
- stretch의 히스토그램이 더욱 깔끔하지만 이진화 결과 equalize와 큰 차이가 없다.
- 따라서 equalize 방법으로 이진화 수행 선택
- 바닥에 노이즈가 있기 때문에 모폴로지 연산을 추가적으로 수행중이다. 모폴로지 연산을 통해 노이즈가 제거되지만 차선이 끊기는 경우가 생겨 확인이 필요하다.
영상 Trackbar
- trackbar를 사용하여 threshold를 변경해가며 이진화 결과를 확인하였다.
😵 어려웠던 점
동영상에서의 trackbar
문제 : trackbar 무한 생성 / trackbar 값 가져오기
- 처음에 별 생각없이 while문 안에 imshow하기 바로 직전에 createTrackbar를 수행했더니 아래와 같이 trackbar가 무한히 생성되었다..ㅋㅋ음에 별 생각없이 while문 안에 imshow하기 바로 직전에 createTrackbar를 수행했더니 아래와 같이 trackbar가 무한히 생성되었다..ㅋㅋ
- trackbar를 생성할 때 이벤트로 처리하여 그 안에서 imshow를 수행했는데 이렇게 하지 않고 값을 어떻게 가져오지...라는 문제가 생겼다.
해결
while 문 밖에 createTrackbar를 선언해놓고 cv::getTrackbarPos()
함수를 사용하여 trackbar에서 선택한 값을 가져오면 된다기
📝 배운 내용
morphologyEx()
에서 open 연산
- iteration=2 인 경우 침식-침식-팽창-팽창 순서로 수행된다