10

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

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

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

4

3 回答 3

9

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并因此在达到任一限制时停止。

于 2014-03-10T13:28:31.790 回答
4

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

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

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

因此,epsilon 项指定了您在子像素值中所需的精度,例如,0.0001您要求子像素值精确到像素的 1/10000 的平均值。(参见Learning OpenCV书的第 321 页)

于 2015-05-12T19:11:47.903 回答
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

于 2013-10-10T07:23:21.097 回答