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

Posted

技术标签:

【中文标题】OpenCV,C++:如何使用 cv::Meanshift【英文标题】:OpenCV, C++: How to use cv::Meanshift 【发布时间】:2013-03-11 15:21:13 【问题描述】:

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

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

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

谢谢

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

以上是关于OpenCV,C++:如何使用 cv::Meanshift的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MacOS 上使用 OpenCV 链接 C++ 程序 [重复]

如何使用 C++ 在 OpenCV 4.2.0 中使用 SIFT? [关闭]

如何在 OSX 中使用 C++ opencv highgui 将活动窗口设置为 opencv 图像

OpenCV / C++ - 如何在向量上使用adaptiveThreshold而不是Mat?

Opencv4Android:如何与 C++ 一起使用

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