我需要找到光流向量的重心。我应用了OpenCV Lucas Kanade功能,可以直观地看到光流向量。现在我如何聚类这些向量并找到它们的重心?找到流向量聚集的位置是我想要实现的目标。
我得到的向量是Point2f之前的点和下一个点。我不知道如何聚类这些载体。如果我使用 kmeans 函数,那么Mat 样本的结构应该是什么?
kmeans(样本,clusterCount,标签,TermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS,0.0001,10000),尝试,KMEANS_PP_CENTERS,中心);
感谢。
答案 0 :(得分: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
这就像一种全球性的方法。但在大多数情况下,您还需要考虑这个职位。您必须考虑其他分段方法,或者必须将位置添加为其他维度。