6-19 Green and Blue Ball Tracking in OpenCV

in #kr6 years ago (edited)

컴퓨터 비전 기술을 현실에 적용하려면 결국 여러 개의 다양한 색상의 물체들을 식별할 수 있어야 한다. 그 중에서 가장 간단한 모델이 2가지 색상의 공을 식별하고 tracking 이 가능해야 할 것이다. 라브베리 파이 보드가 비록 아주 작은 보드지만 몇 개 정도의 색상이 서로 다른 공을 보고 tracking 할 수 있을 정도로 컴퓨팅 파워가 지원된다.

2가지 색상의 공을 tracking 해 보자. 지난번 청색 공 tracking 에 사용했던 코드를 녹색공으로 바꾸어 추가해야 한다. 비슷한 루틴이 loop 안에서 번갈아 가면서 실행된다고 보면 된다. 2개의 공을 tracking 하기 위한 라즈베리 파이의 연산 속도 저하를 우려했으나 그다지 문제가 되지 않았다.

주의할 점은 녹색공 hue 값을 지난번에 50∼90 으로 잡았는데 이번에 그 범위를 30∼90으로 변경했다. 그 이유가 무엇일까? 안되니까 범위를 조금 넓혀 본 것이다. 그러니까 결과가 잘 나왔다.

위 동영상은 야간에 찍은 것이다. 녹색 공의 hue 값 범위를 넓혔기 때문에 낮 시간에도 될 가능성이 높으므로 다시 시도해볼 계획이다.

코드의 초반 라이브러리 모듈에서 deque는 공의 중심궤적 데이터처리를 지원한다. argparse는 말 그대로 argument parsing 작업을 지원하므로 영상처리와는 직접 관련이 없다.

noname01.png

변수 pts 와 gpts는 각각 청색공과 녹색공의 중심좌표를 저장하는 어레이이다.
for loop 내부에서 청색공과 녹색공의 hue 값 범위를설정 한 후 각 색상별로 countous 르 ㄹ찾아 그리고 접하는 원주와 중심을 작도하고 공의 움직임에 따라 중심의 이동 궤적을 tracking하여 영상화면에 출력한다.

noname02.png

지난번 청색공 루틴에서 else: center = (0, 0) 으로 처리했더니만 원점이 좌상점이라 중앙에서 한번씩 삐져나가는 궤적이 자주 나와 center 계산에 문제가 생기면 (0, 0)으로 보내지 않고 이번에는 바로 앞 상태의 중심점 값을 기억했다가 중심점을 찍어 줌으로서 그 근처에서 멈추었다가 움직여 나가는 것으로 개선했다.

noname03.png

청색공이나 녹색공이나 색상에 따른 변수명만 조금 차이가 날 뿐 거의 동일한 알고리듬이 반복되는 것으로 보면 된다. 청색공이나 녹색공 argument 중에 contours 가 들어 있는데 이것은 변경하지 말고 그대로 사용해야 한다.

Pi카메라가 설치된 라즈베리 파이 B/B+ 모델에서 필자의 외부 블로그 주소에서 첨부된 코드를 다운로드 받아 실행시켜 보자. 직접 나가는 경로가 막혀있으면 별도로 인터넷을 열어서 주소를 찾아보기 바란다. 다운로드 후 indentation 이 무너진 부분이 있으면 제대로 복구해서 컴파일 업로딩하도록 한다.
http://blog.daum.net/ejleep1/40

Coin Marketplace

STEEM 0.27
TRX 0.11
JST 0.030
BTC 67708.83
ETH 3801.89
USDT 1.00
SBD 3.48