本篇講解使用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影象分別顯示出來。
constdouble 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引數中的會話標識號來實施會話跟蹤。這種方式要...