gpt4 book ai didi

c++ - opencv MeanShift : which is the area interested?

转载 作者:太空宇宙 更新时间:2023-11-03 22:31:10 25 4
gpt4 key购买 nike

关于opencv和c++中的meanShift算法的一个非常基本的问题!我不清楚在哪个区域进行搜索和相应的转换。我的意思是:我实现了一个非常基本的例子我为 meanShift 函数提供了以下 3 个参数:

1) 一个反投影矩阵 A,

2) 开始搜索的初始区域 B,cv::矩形 B(x,y,w,h);

3) 一个TermCriteria对象C,
cv::TermCriteria C(cv::TermCriteria::MAX_ITER, 10, 0.01);

然后我将这些参数传递给函数:cv::meanShift(A, B, C);

现在,算法工作正常,因为矩形 B 被移动了从其初始位置 B 到与搜索到的直方图相对应的新位置。尽管如此,新位置总是非常接近初始位置。如果搜索到的对象离起始位置B不是很近,则不进行平移。我的意思是:就好像搜索只在初始位置。是否可以告诉算法在更大范围内搜索?我尝试在 TermCriteria 中尝试使用参数,但似乎没有影响必须执行搜索的区域。多谢!瓦莱里奥

最佳答案

我认为您在“我尝试在 TermCriteria 中尝试使用参数”方面是正确的。

假设您在图像域中工作,查看文档时,epsilon 标准似乎是指移动的最小距离,您已将其设置为 0.01 像素。尝试将其更改为更大的数字,代表您希望它移动的最小像素数量,例如将其设置为“1”表示 1 个像素。 MAX_ITER 标准也会在这里发挥作用,您将其设置为“10”,因此当前最大移动距离为 10*0.01 = 0.1 像素。如果您想要更大的类次,请将其设置为更大的数字,即 100。现在:

    cv::TermCriteria C(cv::TermCriteria::MAX_ITER | cv::TermCriteria::EPS, 100, 1.0);

最小偏移量为 1 像素,最大偏移量为 100 像素(编辑:实际上这更像是最大值的下限,因为它可以在迭代中偏移 > 1 像素)。

^^请注意,您还没有将 cv::TermCriteria::EPS 添加到 arg 列表中。

如果这仍然不起作用,那么您的数据中可能存在噪声问题,导致算法在错误的位置停止,因此可能需要进行一些预处理以消除一些噪声。

关于c++ - opencv MeanShift : which is the area interested?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24203825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com