2013-12-15 126 views
3

我需要跟蹤附着在人體上的多個物體,一些顏色物體;所有相同的顏色。我可以通過Threshold imageMoment跟蹤一個對象,但是當我使用多個對象時,計算得出的Moment是介於這兩個或三個之間的東西。我需要每個人都有xy座標。實際上,我想對這些座標序列進行一些分析。 我使用VS2010,OpenCV 2.3.1,Win7 x64。如何跟蹤多個對象位置?

+0

你可以嘗試'粒子過濾'/'凝結'。 你將不得不自己實現它,但它並不難實現。 – Micka

回答

3

您必須單獨計算每個斑點的時刻。爲了達到這個目的,你可以使用cv::findContours來得到一個描述符爲每個斑點的輪廓形式,然後用它來計算它的矩。在下面的代碼片段中,靈感來自this example,它顯示瞭如何使用這種方法計算每個斑點的質心。

std::vector<std::vector<cv::Point> > contours; 
std::vector<cv::Vec4i> hierarchy; 

// Find contours 
cv::findContours(img, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0)); 

// Get the moments 
std::vector<Moments> mu(contours.size()); 
for(int i = 0; i < contours.size(); i++) 
    mu[i] = moments(contours[i], false); 

// Get the mass centers: 
std::vector<cv::Point2f> mc(contours.size()); 
for(int i = 0; i < contours.size(); i++) 
    mc[i] = Point2f(mu[i].m10/mu[i].m00 , mu[i].m01/mu[i].m00);