在一幅影象中尋找和模板影象(patch)最相似的區域。1.判斷相似性:
opencv中有對應的函式——void matchtemplate( const mat& image, const mat& templ, mat&result, int method )
該函式的功能為,在輸入源影象sourceimage(i)中滑動框,尋找各個位置與模板影象template image(t)的相似度,並將結果儲存在結果矩陣result matrix(r)中。該矩陣的每乙個點的亮度表示與模板t的匹配程度。然後可以通過函式minmaxloc定位矩陣r中的最大值(該函式也可以確定最小值)。那通過什麼去評價兩個影象相似呢?這就存在乙個評價準則,也就是引數method,它可以有以下值(匹配的方法):
前面兩種方法為越小的值表示越匹配,後四種方法值越大越匹配。
2.更新跟蹤目標
在第t幀尋找目標的時候,是與t-1幀中我們找到的目標來進行比較的。這樣目標的外觀變化就會及時的更新,但容易導致跟蹤漂移。
3.示例**
基於vs2013+opencv 2.4.9:
模板匹配中差值的平方和(ssd)與互相關準則的關係///object tracking algorithm using matchtemplate
using namespace cv;///author:ja
///date:2015-1-24
#include
using namespace cv;
using namespace std;
// global variables
rect box;
bool drawing_box = false;
bool gotbb = false;
// bounding box mouse callback
void mousehandler(int event, int x, int y, int flags, void *param)
break;
case cv_event_lbuttondown:
drawing_box = true;
box = rect(x, y, 0, 0);
break;
case cv_event_lbuttonup:
drawing_box = false;
if (box.width < 0)
if (box.height < 0)
gotbb = true;
break; }}
// tracker: get search patches around the last tracking box,
// and find the most similar one
void tracking(mat frame, mat &model, rect &trackbox)
int main(int argc, char * argv)
//register mouse callback to draw the bounding box
cvnamedwindow("tracker", cv_window_autosize);
cvsetmousecallback("tracker", mousehandler, null);
mat frame, model;
capture >> frame;
while (!gotbb)
//remove callback
cvsetmousecallback("tracker", null, null);
mat gray;
cvtcolor(frame, gray, cv_rgb2gray);
model = gray(box);
int framecount = 0;
while (1)
return 0;
}
using namespace std;
// global variables
rect box;
bool drawing_box = false;
bool gotbb = false;
// bounding box mouse callback
void mousehandler(int event, int x, int y, int flags, void *param)
break;
case cv_event_lbuttondown:
drawing_box = true;
box = rect(x, y, 0, 0);
break;
case cv_event_lbuttonup:
drawing_box = false;
if (box.width < 0)
if (box.height < 0)
gotbb = true;
break; }}
// tracker: get search patches around the last tracking box,
// and find the most similar one
void tracking(mat frame, mat &model, rect &trackbox)
int main(int argc, char * argv)
//register mouse callback to draw the bounding box
cvnamedwindow("tracker", cv_window_autosize);
cvsetmousecallback("tracker", mousehandler, null);
mat frame, model;
capture >> frame;
while (!gotbb)
//remove callback
cvsetmousecallback("tracker", null, null);
mat gray;
cvtcolor(frame, gray, cv_rgb2gray);
model = gray(box);
int framecount = 0;
while (1)
return 0;
}
目標跟蹤之模板匹配 簡單的模板匹配
一 概述 目標跟蹤是計算機視覺領域的乙個重要分支。研究的人很多,近幾年也出現了很多很多的演算法。大家看看淋漓滿目的 就知道了。但在這裡,我們也聚焦下比較簡單的演算法,看看它的優勢在 畢竟有時候簡單就是一種美。在這裡我們一起來欣賞下 模板匹配 這個簡單點的跟蹤演算法。它的思想很簡單,我們把要跟蹤的目標...
多目標模板匹配
一.模板匹配 模板匹配是數字影象處理的重要組成部分之一。把不同感測器或同一感測器在不同時間 不同成像條件下對同一景物獲取的兩幅或多幅影象在空間上對準,或根據已知模式到另一幅圖中尋找相應模式的處理方法就叫做模板匹配。簡單而言,模板就是一幅已知的小影象。模板匹配就是在一幅大影象中搜尋目標,已知該圖中有要...
目標跟蹤小結
一 引言 在需要監控的環境裡,如何能夠判斷出進入特定區域的目標,並且能夠跟蹤目標的軌跡。分為兩種情況 一是靜態背景下的目標跟蹤 二是動態背景下的目標跟蹤。二 靜態背景下的目標跟蹤方法 2 多目標 靜態環境下的多目標跟蹤,需要確定每個目標的特徵,位置,運動方向,速度等資訊。3 預處理 由於獲得的影象總...