opencv 光流跟蹤

2021-09-26 01:43:46 字數 1798 閱讀 5588

物件跟蹤三要素:影象表示,外觀模型,移動模型

klt(lucas kanade tracker)條件:亮度恆定,近距離移動,空間一致性

稀疏光流:sparse optical flow

找到特徵點:角點檢測法

**:

#include #include using namespace cv;

using namespace std;

mat frame,gray;

mat prev_frame,prev_gray;

vectorfeatures;

vectorinipoints;

vectorfpts[2];

vectorstatus;

vectorerrors;

//void drawfeature(mat &inframe)

////}

void drawfeature(mat &inframe)

}void detectfeatures(mat &inframe,mat &ingray)

void drawtracklines()

}void kltrackfeature()

} inipoints.resize(k);

fpts[1].resize(k);

drawtracklines();

std::swap(fpts[1],fpts[0]);

}int main(int argc, char** ar**)

while(capture.read(frame))

else

if(prev_gray.empty())

kltrackfeature();

drawfeature(frame);

//儲存上一針的影象

gray.copyto(prev_gray);

frame.copyto(prev_frame);

imshow("input",frame);

if(waitkey(33) == 27)

}capture.release();

waitkey(0);

return 0;

}

稠密光流:dense optical flow

calcopticalflowfarneback() 稠密光流

**:

#include #include using namespace cv;

using namespace std;

void drawopticalflowhf(mat &flowdata, mat &image,int step)

} }}int main(int argc, char** ar**)

mat frame,gray;

mat prev_frame,prev_gray;

mat flowresult,flowdata;//光流的結果,以及資料

capture.read(frame);

imshow("input1",frame);

cvtcolor(frame,prev_gray,color_bgr2gray);

while(capture.read(frame))

if(waitkey(33) == 27)

}capture.release();

waitkey(0);

return 0;

}

opencv學習筆記四十一 稀疏光流跟蹤

lucas kanada光流假設 場景中物體被跟蹤的部分的亮度不變 相鄰幀之間的運動較小 相鄰的點保持相鄰。lk演算法只需要每個感興趣點周圍小視窗的區域性資訊,但是較大的運動會將點移除這個小視窗,從而造成演算法無法再找到這些點。金字塔的lk演算法可以解決這個問題,即從金字塔的最高層 細節最少 開始向...

目標跟蹤之光流法 光流法簡單介紹

光流的概念是gibson在1950年首先提出來的。它是空間運動物體在觀察成像平面上的畫素運動的瞬時速度,是利用影象序列中畫素在時間域上的變化以及相鄰幀之間的相關性來找到上一幀跟當前幀之間存在的對應關係,從而計算出相鄰幀之間物體的運動資訊的一種方法。一般而言,光流是由於場景中前景目標本身的移動 相機的...

OpenCV學習筆記(一) 光流法學習

1 calcopticalflowpyrlk 該方法使用的方法是基於影象金字塔的lucas kanande演算法,能夠跟蹤稀疏的光流,影象金字塔的作用是通過不斷地下取樣來減小兩幀之間光流點的運動,從而保證識別的準確性 因為l k演算法只有在位移很小的時候才有作用 具體用法如下 void calcop...