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 图像