OpenCV,C ++:如何使用cv :: Meanshift

时间:2013-03-11 15:21:13

标签: c++ opencv computer-vision

我有一个2-D点的向量,我试图使用meanshift算法来检测数据中的多个模式,但是我对方法签名感到有点困惑。

1)我可以传递我的向量(如果是这样)或者我必须转换为cv :: Mat(如果是这样的话,如果我有负值的点)。

2)如何提取多种模式,从我看到的函数只返回一个int

由于

1 个答案:

答案 0 :(得分:4)

OpenCV的均值漂移实现是为了跟踪单个对象(作为CamShift algorithm的一部分),因此我不相信它已被扩展为使用多模态分布来跟踪多个对象。它将为您提供一个以概率图像模式为中心的边界框(由cv::Rect window的参考通道返回)。

您的数据是否表示为高斯混合(或其他一些对称分布)?如果是这样,你可以使用k-means聚类来找到你的分布方式(这将是对称分布的模式),尽管选择k会有问题。

或者,可以启用跟踪多个对象(或找到多个模式)的黑客攻击可能涉及重复调用此函数,检索模式,然后从后投影直方图中将此部分归零。

对于您的数据表单,函数输入是cv::Mat,因此您必须转换数据。但是,您声称具有负值,并且此opencv函数需要概率直方图(通常您使用cv::calcBackProject()从图像计算),所以如果您尝试将cv::Mat传递给它,我希望它会抱怨负值。