我想使用opencv函数cv::cornerSubPix()
,因为我需要另一个函数,cv::TermCriteria
我的问题是关于这个函数的最后一个参数:
cv::TermCriteria(cv::TermCriteria::MAX_ITER +
cv::TermCriteria::EPS,
50, // max number of iterations
0.0001)); // min accuracy
这里的最小准确度是什么意思?
答案 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