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