cv::TermCriteria如何在opencv中工作

how does cv::TermCriteria work in opencv?

本文关键字:opencv 工作 TermCriteria cv      更新时间:2023-10-16

我想使用 opencv 函数cv::cornerSubPix()为此我需要另一个函数,cv::TermCriteria我的问题是关于这个函数的最后一个参数:

cv::TermCriteria(cv::TermCriteria::MAX_ITER +
                cv::TermCriteria::EPS,
                50, // max number of iterations
                0.0001)); // min accuracy

这里的最小精度是什么意思?

TermCriteria 的结构是

TermCriteria(
int type, // CV_TERMCRIT_ITER, CV_TERMCRIT_EPS, or both
int maxCount,
double epsilon
);

通常我们使用 TermCriteria() 函数来生成我们需要的结构。这该函数的第一个参数是 CV_TERMCRIT_ITERCV_TERMCRIT_EPS,它告诉算法我们想要在一定次数的迭代后或当收敛度量分别达到一些小值。接下来的两个参数设置其中一个、另一个或两个条件应终止算法的值。

我们同时拥有这两个选项的原因是,我们可以将类型设置为 CV_TERMCRIT_ITER |CV_TERMCRIT_EPS,因此在达到任一限制时停止。

epsilon 项的确切含义取决于终止标准所针对的算法。(有关cvTermCriteria的更多详细信息,请参阅Learning OpenCV书籍的第299-300页)

在这里,具体来说,来自文档:

。拐角位置细化过程在之后停止 criteria.maxCount迭代或角位置移动时 在某些迭代中小于criteria.epsilon

因此,epsilon 项指定了子像素值所需的精度,例如,值为 0.0001 表示您要求的子像素值精度低至像素的 1/10000。(见《学习OpenCV》一书第321页)

TermCriteria 的 OpenCV 文档在这里 http://docs.opencv.org/modules/core/doc/basic_structures.html#termcriteria 最后一个参数是 epsilon。某些算法是迭代的,并在达到所需的精度时停止。

在这里查找 cv::cornerSubPix() 函数的实现 https://github.com/Itseez/opencv/blob/master/modules/imgproc/src/cornersubpix.cpp