2

我需要找到光流向量的重心。我应用了 OpenCV Lucas Kanade 函数,可以直观地看到光流向量。现在我如何对这些向量进行聚类并找到它们的重心?找到流向量聚集的位置是我想要实现的。

我得到的向量是 Point2f 前一个点和下一个点。我不确定如何对这些向量进行聚类。如果我使用kmeans函数,那么 Mat样本的结构应该是什么?

kmeans(样本,clusterCount,标签,TermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,0.0001,10000),尝试,KMEANS_PP_CENTERS,中心);

谢谢。

4

1 回答 1

0

这取决于你想要达到什么结果。如果你想对相同的移动像素进行聚类,而不是通过估计下一个点和前一个点之间的差异来计算运动,代码如下所示:

std::vector<cv::Point2f> prevPts, currPts;
... run lucas kanade ...
cv::Mat samples(prevPts.size(), 2, CV_32FC1);
for(unsigned int n = 0; n < prevPts.size(); n++)
{
  samples.at<float>(n,0) = currPts[n].x - prevPts[n].x;
  samples.at<float>(n,1) = currPts[n].y - prevPts[n].y;
}
... run clustering

这就像一个全球性的方法。但在大多数情况下,您还需要将位置考虑在内。比您必须考虑其他分割方法,或者您必须将位置添加为附加维度。

于 2013-01-16T20:05:39.087 回答