2016-06-30 17 views
5

Opencv의 조밀 한 옵티컬 플로우 함수의 출력을 사용하여 모션 벡터의 떨림 플롯을 그리지 만 실제로 함수가 출력하는 것을 찾을 수 없었습니다. 코드는 다음과 같습니다.OpenCV의 Dense optical flow (Farneback) 기능에서 출력되는 내용은 무엇입니까? 파이썬에서 옵티컬 플로우 맵을 만드는 데 어떻게 이것을 사용할 수 있습니까?

사실상 밀도가 높은 옵티컬 플로에 대한 OpenCv 자습서에서 제공된 코드와 같습니다. 인쇄 기능에서 다음 출력을받습니다.

flow [[[ 0.00000000e+00 0.00000000e+00] 
    [ 0.00000000e+00 0.00000000e+00] 
    [ 0.00000000e+00 0.00000000e+00] 
    ..., 
    [ 0.00000000e+00 0.00000000e+00] 
    [ 0.00000000e+00 0.00000000e+00] 
    [ 0.00000000e+00 0.00000000e+00]] 

..., 
[[ -3.54891084e-14 -1.38642463e-14] 
    [ -2.58058853e-14 -1.54020863e-14] 
    [ -5.56561768e-14 -1.88019359e-14] 
    ..., 
    [ -7.59403916e-15 1.16633225e-13] 
    [ 7.22156371e-14 -1.61951507e-13] 
    [ -4.30715618e-15 -4.39530987e-14]] 

[[ -3.54891084e-14 -1.38642463e-14] 
    [ -2.58058853e-14 -1.54020863e-14] 
    [ -5.56561768e-14 -1.88019359e-14] 
    ..., 
    [ -7.59403916e-15 1.16633225e-13] 
    [ 7.22156371e-14 -1.61951507e-13] 
    [ -4.30715618e-15 -4.39530987e-14]] 

이 값이 정확히 무엇인지 알고 싶습니다. 원본 X, Y 좌표? 최종 X, Y 좌표? 거리가 이동 했습니까? 파이썬에서 내가 알고 어떤 기능이 없기 때문에 그 광학 흐름 맵을 나타내는의 https://www.getdatajoy.com/examples/python-plots/vector-fields 이것은 :

나는 다음 페이지에서 코드를 사용하여 떨림 플롯을 만들기 위해 노력하고 초기 및 최종 좌표를 찾을 계획 너를 위해서.

미리 감사드립니다.

답변

5

거의 다 왔었습니다. 먼저 calcOpticalFlowFarneback Documentation 살펴 보도록하자 거기 말한다 :

flow-prev 및 유형 CV_32FC2와 같은 크기가 계산 흐름 이미지.

그래서 실제로 얻는 것은 입력 프레임과 동일한 크기의 매트릭스입니다.
flow 행렬의 각 요소는 prev 프레임에서 해당 픽셀의 변위 을 나타내는 지점입니다. 이것은 마지막 프레임에서 델타 x와 델타 y를 제공하는 x와 y 값 (픽셀 단위)이있는 점을 의미합니다.

+1

대단히 감사합니다. 따라서 흐름 행렬은 원래 이미지와 같은 크기의 행렬이 될 것이고, 특정 위치에 저장된 X 및 Y 값은 현재 위치에 도달하기 위해 이동 한 X 및 Y 거리가됩니다. 그래서 그들이 어디에서 이동했는지 알아 내야한다면, 현재의 픽셀 위치를 유동 행렬에 사용하고 X와 Y 거리를 뺍니다. –

+0

예, 정확하게 그랬습니다. –

+0

모든 옵티컬 플로우 알고리즘이 픽셀 단위로 출력합니까? – asdf