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

OpenCV, C++: How to use cv::Meanshift

本文关键字:cv Meanshift 何使用 c++ OpenCV      更新时间:2023-10-16

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

1)我可以传递我的向量(如果是什么形式),或者我必须转换为cv::Mat(如果是如何?如果我有负值的点)

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

谢谢

OpenCV的mean shift实现是用于跟踪单个对象的(作为CamShift算法的一部分),因此我不认为它已经扩展到使用多模态分布来跟踪多个对象。它会给你一个以概率图像(由cv::Rect window的参考通道返回)的模式为中心的边界框。

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

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

至于数据的形式,函数输入是通过cv::Mat,因此您必须转换数据。然而,你声称有负值,这个opencv函数期望一个概率直方图(通常你使用cv::calcBackProject()从图像中计算),所以我希望它会抱怨,如果你试图传递它一个包含负值的cv::Mat