2017-01-24 13 views
3

OpenCV에서 밀도가 높은 광학 흐름을 사용하여 객체의 이동 방향을 추측하려고합니다. 나는 흐름 좌표를 얻으려면 calcOpticalFlowFarneback()을 사용하고 방향을 나타내는 벡터 각도를 얻으려면 cartToPolar()을 사용합니다.OpenCV에서 각도를 측정하기위한 기준점은 무엇입니까?

결과를 해석하려면 각도 측정을위한 기준점을 알아야합니다. 나는 각도 범위가 360 °임을 나타내는 this 블로그 글을 발견했다. 각도 측정은 단위 원의 선을 따라 진행됩니다. 나는 그 이상을 할 수 없었다.

설명서는 cartToPolar()에 해당하지 않으며 테스트에 실패했습니다.

답변

3

cartToPolar()에 의해 생성 된 각은 왼쪽 상단의 이미지 좌표 시작점을 중심으로 시계 방향으로 90 ° 회전 한 단위 원을 기준으로합니다. It would look like this.

OpenCV에서 제공 한 dense optical flow example을 사용하여이 결론에 도달했습니다. 라디안에서 정확한 각도 변환을 얻으려면 hsv[...,0] = ang*180/np.pi/2 행을 hsv[...,0] = ang*180/np.pi으로 바꿨습니다. 그런 다음 사람들이 오른쪽 위에서 왼쪽으로 움직이는 비디오를 테스트했고 그 반대의 경우도 테스트했습니다. 나는 GIMP로 지배적 인 색상을 샘플링하고 HSV 값으로 변환 한 RGB 값을 얻었다. 색조 값은도 단위의 각도에 해당합니다.

오른쪽 위에서 왼쪽으로 움직이는 사람들은 약 300 °의 각도를 만들고 사람들은 다른 방향으로 움직여 약 120 °의 각도를 만들어 냈습니다. 이것은 단위 원이 배치되는 방식을 암시합니다.

0

code에서 보면, fastAtan32f은 각도를 계산하는 데 사용됩니다. 그게 atan2 구현 인 것 같습니다.