cv :: TermCriteria如何在opencv中工作?

时间:2013-09-23 09:23:04

标签: c++ opencv

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

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

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

3 个答案:

答案 0 :(得分:8)

TermCriteria 的结构是

TermCriteria(

int type, // CV_TERMCRIT_ITER, CV_TERMCRIT_EPS, or both

int maxCount,

double epsilon
);

通常我们使用 TermCriteria()函数来生成我们需要的结构。该 此函数的第一个参数是 CV_TERMCRIT_ITER CV_TERMCRIT_EPS ,它告诉算法我们要在经过一定次数的迭代后或何时终止 收敛度量(分别)达到一些小值。接下来的两个论点 设置这些标准中的一个,另一个或两个应该终止算法的值。

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

答案 1 :(得分:3)

epsilon术语的确切含义取决于终止标准所针对的算法。 (有关awk -F':' '$1 !~ /^#/ && _[$3]++ {print}' /etc/passwd )的更多详细信息,请参阅Learning OpenCV一书的第299-300页

具体来说,来自documentation

  

......角位置细化的过程在此之后停止   cvTermCriteria次迭代或拐角位置移动时   在某次迭代中小于criteria.maxCount

因此,epsilon术语指定子像素值中所需的准确度,例如,值criteria.epsilon表示您要求子像素值精确到像素的1/10000。 (参见Learning OpenCV书的第321页)

答案 2 :(得分:0)

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