3
我需要跟蹤附着在人體上的多個物體,一些顏色物體;所有相同的顏色。我可以通過Threshold image
和Moment
跟蹤一個對象,但是當我使用多個對象時,計算得出的Moment
是介於這兩個或三個之間的東西。我需要每個人都有xy
座標。實際上,我想對這些座標序列進行一些分析。 我使用VS2010,OpenCV 2.3.1,Win7 x64。如何跟蹤多個對象位置?
我需要跟蹤附着在人體上的多個物體,一些顏色物體;所有相同的顏色。我可以通過Threshold image
和Moment
跟蹤一個對象,但是當我使用多個對象時,計算得出的Moment
是介於這兩個或三個之間的東西。我需要每個人都有xy
座標。實際上,我想對這些座標序列進行一些分析。 我使用VS2010,OpenCV 2.3.1,Win7 x64。如何跟蹤多個對象位置?
您必須單獨計算每個斑點的時刻。爲了達到這個目的,你可以使用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);
你可以嘗試'粒子過濾'/'凝結'。 你將不得不自己實現它,但它並不難實現。 – Micka