使用流光法實現物體跟蹤

2021-07-03 08:30:58 字數 2765 閱讀 5017

本篇講解使用opencv提供的流光法演算法介面,實現物體跟蹤。範例**為參考修改tvl1_optical_flow.cpp實現。
#include 

#include

#include "opencv2/video/tracking.hpp"

#include "opencv2/highgui/highgui.hpp"

using namespace cv;

using namespace std;

inline bool isflowcorrect(point2f u)

static vec3b computecolor(

float fx,

float fy)

const

float rad =

sqrt

(fx * fx + fy * fy)

;const

float a =

atan2

(-fy,

-fx)/(

float

)cv_pi;

const

float fk =

(a +

1.0f)/

2.0f

*(ncols -1)

;const

int k0 = static_cast

(fk)

;const

int k1 =

(k0 +1)

% ncols;

const

float f = fk - k0;

vec3b pix;

for(

int b =

0; b <

3; b++

)return pix;

}static

void drawopticalflow(

const mat_& flow, mat& dst,

float maxmotion =-1

)}}for

(int y =

0; y < flow.rows

;++y)}}

int main(

int argc,

const

char

* argv)

videocapture cap;

cap.open

(argv[1]

);while(1

) cvtcolor(frame0, frame0, cv_bgr2gray);if

(!frame1.empty()

) frame0.copyto

(frame1);}

waitkey();

return0;

}

ptr tvl1 = createoptflow_dualtvl1();

mat out;

if(argc <2)

videocapture cap;

cap.open

(argv[1]

);

2、在迴圈中,不斷的讀取video的幀資料到frame0中,接著cvtcolor將frame0中的資料,灰階化。判斷到儲存前一幀資料為空,也就是表示

剛剛讀取到第一幀資料時候,不進入處理函式中,直接跳過。最後將frame0中的幀資料,儲存到frame1中。frame0進入下一次迴圈,獲得新一幀

資料。

while(1

) cvtcolor(frame0, frame0, cv_bgr2gray);if

(!frame1.empty()

) frame0.copyto

(frame1)

;}

3、當檢測到frame1儲存了前一幀資料之後,進入到流光法計算中。首先獲得當前時鐘gettickcount。使用tvl1->calc分別傳入當前

幀(frame0)和前一幀(frame1),將獲得的位置偏移儲存到flow中。接著計算出calc函式處理花費的時間,之後使用函式

drawopticalflow,利用flow中的位置偏移,根據偏移位置的方向和速度,從而在out影象,對應位置賦予不同的顏色和飽和度。最後將

當前幀影象和處理之後的out影象分別顯示出來。

const

double start =

(double

)gettickcount();

tvl1->calc(frame0, frame1, flow)

;const

double timesec =

(gettickcount(

)- start)

/ gettickfrequency();

cout <<

"calcopticalflowdual_tvl1 : "

<< timesec <<

" sec"

<< endl;

drawopticalflow(flow, out)

; imshow(

"out"

, out)

; imshow(

"src"

, frame0)

; waitkey(10)

;

對應的效果演示如下:

粒子濾波實現物體跟蹤

粒子濾波實現物體跟蹤的演算法原理 1 初始化階段 提取跟蹤目標特徵 該階段要人工指定跟蹤目標,程式計算跟蹤目標的特徵,比如可以採用目標的顏色特徵。具體到rob hess的 開始時需要人工用滑鼠拖動出乙個跟蹤區域,然後程式自動計算該區域色調 hue 空間的直方圖,即為目標的特徵。直方圖可以用乙個向量來...

opencv 顏色空間轉化並實現物體跟蹤

一 影象處理的基本操作 因為這是第一篇寫opencv的筆記,故先講講在python下寫opencv的基本操作。總共總結了三點如下 開頭一定要加編碼宣告 coding utf 8 python下記得引入opencv模組 import cv2 要知道如何讀取並展示,如下 coding utf 8 imp...

使用url重寫實現Session跟蹤

使用url重寫實現session跟蹤 這是在瀏覽器不支援cookie的情況下,servlet引入的一種補充的會話機制。當使用者發出下一次請求時,如果請求訊息中沒有包含cookie頭字 段,servlet引擎則認為客戶端不支援cookie,他將依據請求url引數中的會話標識號來實施會話跟蹤。這種方式要...