如何跟踪多个物体的位置?

3

我需要追踪多个物体,这些物体是一些颜色相同的附着在人体上的物体。我可以通过使用阈值图像来追踪一个物体,但当我使用多个物体时,计算出的会介于这两个或三个物体之间。我需要每个物体的xy坐标。实际上,在所有这些坐标序列上,我想要进行一些分析。我正在使用VS2010、OpenCV 2.3.1和Win7 x64。


你可以尝试使用“粒子滤波”/“凝聚算法”。你需要自己实现它,但是实现起来并不难。 - Micka
1个回答

3
你需要为每个blob单独计算时刻。为此,你可以使用cv :: findContours 获取每个blob的轮廓形式的描述符,然后使用它来计算其时刻。在以下代码片段中,受这个示例的启发,展示了如何使用这种方法计算每个blob的质心。
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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接