2013-12-15 86 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);