我需要追踪附着在人体上的多个物体,其中一些是彩色物体。都是相同的颜色。我可以通过Threshold imageMoment跟踪一个对象,但是当我使用多个对象时,计算出的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);

关于opencv - 如何跟踪多个对象的位置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20595380/

10-10 18:57