calcopticalflowpyrlk 예제

이 예제는 선이 메모리에 유지되지 않고 점의 첫 번째 위치에서 점의 마지막 기록된 위치까지 그려지는 방식이 약간 다릅니다. 모션 기록 이미지를 별도의 독립 모션(예: 왼손, 오른손)에 해당하는 몇 부분으로 분할합니다. Lucas-Kanade 메서드는 희소 기능 집합에 대한 광학 흐름을 계산합니다(이 예에서는 Shi-Tomasi 알고리즘을 사용하여 감지된 모서리). OpenCV는 조밀한 광학 흐름을 찾는 또 다른 알고리즘을 제공합니다. 프레임의 모든 점에 대한 광학 흐름을 계산합니다. 2003년 거너 파네백의 “다각적 확장에 따른 2프레임 모션 추정”에 설명된 거너 파네백의 알고리즘을 기반으로 합니다. 픽셀이 성공적으로 상태[0] == 1및 features_next[0]를 찾은 경우 다음 프레임에서 픽셀 좌표가 표시됩니다. 값 정보는 이 예제에서 찾을 수 있습니다: OpenCV/샘플/cpp/lkdemo.cpp 함수는 반복개체 검색 알고리즘을 구현합니다. 개체의 입력 백 프로젝션과 초기 위치를 사용합니다. 후면 투영 이미지의 창에 있는 매스 중심이 계산되고 검색 창 중심이 매스 중심으로 이동합니다. 프로시저는 지정된 횟수의 반복 기준이 수행될 때까지 또는 창 중심이 기준보다 적게 이동할 때까지 반복됩니다. 알고리즘은 CamShift() 내부에서 사용되며 CamShift()와 달리 검색 창 크기 또는 방향은 검색 중에 변경되지 않습니다.

calcBackProject()의 출력을 이 함수에 전달하기만 하면 됩니다. 그러나 후면 투영을 미리 필터링하고 노이즈를 제거하면 더 나은 결과를 얻을 수 있습니다. 예를 들어 findContours()를 사용 하 여 연결 된 구성 요소를 검색 하 고 작은 영역 (등고선()))으로 윤곽을 버리고 나머지 윤곽선 그리기() drawContours() 를 사용 하 여 렌더링 하 여이 작업을 수행할 수 있습니다. 그래서 사용자 관점에서, 아이디어는 간단하다, 우리는 추적 할 수있는 몇 가지 포인트를 제공, 우리는 그 점의 광학 흐름 벡터를 수신. 그러나 다시 몇 가지 문제가 있습니다. 지금까지 우리는 작은 움직임을 다루고 있었습니다. 따라서 큰 움직임이있을 때 실패합니다. 그래서 다시 우리는 피라미드에 간다. 우리가 피라미드에 올라갈 때, 작은 움직임이 제거되고 큰 움직임은 작은 움직임이된다. 그래서 루카스 카나데를 적용하면 저울과 함께 광학 흐름을 얻을 수 있습니다. 이 함수는 피라미드에서 Lucas-Kanade 광학 흐름의 희소한 반복 버전을 구현합니다. [부게00]를 참조하십시오.

이 함수는 TBB 라이브러리와 병렬화됩니다.