OpenCV 中 TermCriteria 类型的差异:COUNT 和 MAX_ITER

Difference of TermCriteria type in OpenCV : COUNT and MAX_ITER

TermCriteria

The doc page 表示 MAX_ITERCOUNT 相同,类型可以是以下之一:COUNTEPSCOUNT + EPS。我想知道 COUNT + EPSMAX_ITER + EPS 之间是否有区别。我发现在不同的地方,有这两种不同的风格。 运行?

时会产生不同的效果吗

没有区别。 COUNT 和 MAX_ITER 意思相同。它们具有相同的值,因此无法区分。

好吧,它们的含义 取决于采用 TermCriteria 的函数 tuple/struct/object。不过,相同的值意味着标识符是可以互换的。

那些命名常量存在于枚举中。这些值被选择为位域中的位。所以它们实际上是 flags 并且通常应该与 | (按位或运算符)结合使用。

+ 是一个有趣的习俗,可能是因为以下原因...如果您给出两个终止条件,则算法会在其中任何一个为真时终止。所以一个人可以说 both 一个 and 另一个被给出了......现在人们的大脑回旋扭曲思考“和”和“要么”。将这些标志与 + 结合起来很好地回避了。

cv.TermCriteria_COUNT    == 1
cv.TermCriteria_MAX_ITER == 1
cv.TermCriteria_EPS      == 2

所以你的选择是:

COUNT (means MAX_ITER)
MAX_ITER (means COUNT)
EPS
COUNT + EPS
MAX_ITER + EPS

注意你不要说 COUNT + MAX_ITER错了!)因为那是1 + 1 = 2并且 现在是 EPS,这不是该表达式应该表达的意思。

文档可能不包含所有信息,它是从 OpenCV public 头文件(通过 doxygen 及其配置文件)生成的。

就用一个IDE/Editor,浏览源代码,搜索TermCriteria,会看到MAX_ITERCOUNT枚举元素值。应该是一样的。