아래 url 주소에서 청색공의 궤적을 적나라하게 보여주는 동영상을 잘 관찰하셨나요?
사실 이 동영상의 테크닉은 아래 주소의 PyImageSearch 사이트에 가면 볼 수 있다.
Ball Tracking with OpenCV
https://www.pyimagesearch.com/2015/09/14/ball-tracking-with-opencv/
하지만 이번 Color Ball Tracking 코드 작성에서 그의 권고대로도 여러 번 시도해 보았으나 연속되는 에러 메시지를 받으면서 헤어날 길이 없었으며 그 원인도 끝내 알 수 없었다.
그 프로그래머가 imutils 라이브러리 모듈을 중용했지만 어차피 내가 작성하는 Pi 카메라를 사용하는 코드는 틀 자체가 달랐기 때문에 가능한 한 잘 모르는 라이브러리 모듈을 빼기위한 필사적인 노력 끝에 비슷하게 실행되는 만족스러운 결과를 얻을 수 있었다. 제거해버린 라이브러리 모듈은 deque, imutils, argparse 3종류이다.
OpenCV 컬러 Ball Tracking에서 Hue 값을 이용하여 마스킹된 컬러 공을 추적하기 위해 maskb에서 Blop으로 인식된 오브젝트의 중심의 좌표 값을 찾아내었다. 이 중심 값을 계산하기 위해서는 drawContours 명령을 사용하여 우선 공 모양에 가까운 Blob을 둘러싸는 윤곽선(Contours)을 찾아야 한다.
하지만 찾은 윤곽선을 세밀하게 OpenCV 명령을 사용하여 그려보면 조명의 영향으로 꼭 원형으로 나오지는 않는다는 점이다. 그림에서 보면 청색공의 Blob 과 노란색 원 사이의 갭이 눈에도 확연히 보인다. 그래서 차라리 일단 찾아낸 Contours 데이타를 대상으로 최소크기의 접하는 원 모양을 결정하고 이어 모멘트를 계산하여 중심좌표를 계산해서 찾아야 할 것이다. 이미 그렇게 했었다.
코드 실행 과정에서 라즈베리 파이선 코드가 실시간 계산을 잘 하지만 때때로 조명 영향으로 인해 실수를 많이 하므로 코드가 실행 중 끓어지지 않도록 요령껏 (snipet)코드를 잘 짜야 한다. 이 문제는 영상처리의 본질적인 문제가 아니라 Contours를 찾기 위한 단순한 수학 연산과정에서 분모의 값이 0으로 나타나게 되는 일종의 노이즈와 같은 현상을 방지하는 트릭 정도로 보면 될 것이다.
PyImageSearch 사이트와 코딩 상의 차이점은 대단히 간단하다. 내가 모르는 어려워 보이는 표현의 명령을 삭제하여 단순화 하였다.
커버에서 보여준 동영상의 궤적을 화면상에 그려주는 cv2.line()처리 루틴은 PyImageSearch 의 그것을 있는 그대로 따다 넣었으며 성공적으로 실행이 되었다.
필자의 블로그에 궤적을 나타낼 수 있도록 수정된 파이선 코드를 또 다른 주소에 올려두었으니 다운받아서 실행해 보도록 하자. 컬러 볼 궤적 표현을 위한 파이선 코드
'머신러닝' 카테고리의 다른 글
Green and Blue Ballsl Tracking in OpenCV python code (0) | 2012.01.20 |
---|---|
Xfile 배우들 사진과 Canny Edge 검출 파이선 코드 (0) | 2012.01.18 |
Color Ball Tracking 파이선 코드 (0) | 2012.01.16 |
Lane Detection 시뮬레이션 동영상 및 HUE 마스크 실행 파일 (0) | 2012.01.16 |
OpenCV GaussianBlur 기법 실행 코드 및 고양이 사진 파일 (0) | 2012.01.15 |