2013-09-23 64 views
9

我想使用OpenCV的功能cv::cornerSubPix()的,我需要一個又一個的cv::TermCriteria我的問題是關於這個函數的最後一個參數:cv :: TermCriteria如何在opencv中工作?

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

什麼最小精度在這裏是什麼意思?

+0

我在這裏看到的答案不是很詳細。你有沒有找到關於TermCriteria的一個很好的解釋?我現在試圖理解它,但我沒有找到任何好的解釋。 – definera

+0

@ Crash-ID:\我沒有抱歉,我沒有再使用OpenCV,所以祝你好運與你的項目 – Engine

+0

Okey,謝謝:) – definera

回答

7

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並因此在達到任一限制時停止。

3

ε項的確切含義取決於終止標準所針對的算法。 (見Learning OpenCV書299-300頁爲一些細節上cvTermCriteria

這裏,具體而言,從documentation

...角點位置的過程之後 criteria.maxCount迭代或者停止或者在某些迭代中角落位置移動了 小於criteria.epsilon

所以小量項指定的子像素值,你需要的精確度,例如0.0001值意味着你所要求的子像素值下降到像素的1 /第10000精度。 (見Learning OpenCV書的第321頁)