Opencv 光流簇的重心

Opencv 光流簇的重心,opencv,opticalflow,Opencv,Opticalflow,我需要找到光流矢量的重心。我应用了OpenCV Lucas Kanade函数,可以直观地看到光流矢量。现在我如何聚集这些向量并找到它们的重心?找到流向量聚集的位置是我想要实现的 我得到的向量是点2f上一个点和下一个点。我不知道如何对这些向量进行聚类。如果我使用kmeans函数,那么Mat示例的结构应该是什么 kmeans(样本、聚类计数、标签、术语标准(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS,0.0001,10000)、尝试次数、kmeans_PP_中心、中心) 谢

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

我得到的向量是点2f上一个点和下一个点。我不知道如何对这些向量进行聚类。如果我使用kmeans函数,那么Mat示例的结构应该是什么

kmeans(样本、聚类计数、标签、术语标准(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS,0.0001,10000)、尝试次数、kmeans_PP_中心、中心)


谢谢。

这取决于你想要获得什么样的结果。如果要聚集相同的运动像素,而不是通过估计下一个点和上一个点之间的差异来计算运动,则代码如下所示:

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
std::vector prevPts,currPts;
... 运行lucas kanade。。。
cv::Mat样本(prevPts.size(),2,cv_32FC1);
for(无符号整数n=0;n
这似乎是一种全球性的做法。但在大多数情况下,你也需要考虑到这个职位。您必须考虑其他分割方法,或者必须将位置添加为附加维度。