2013-09-23 8 views
9

ich die opencv Funktion cv::cornerSubPix() für die ich brauche eine andere, die cv::TermCriteria meine Frage verwenden möchten, um den letzten Parameter dieser Funktion:Wie funktioniert cv :: TermCriteria in opencv?

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

was hier nicht die min Genauigkeit bedeuten?

+0

Ich sehe die Antworten hier sind nicht wirklich detailliert. Hast du eine schöne Erklärung zu TermCriteria gefunden? Ich versuche es jetzt zu verstehen und finde keine guten Erklärungen. – definera

+0

@ Crash-ID: \ Tut mir nicht leid, ich benutze OpenCV nicht mehr, also wünsche dir viel Glück mit deinem Projekt – Engine

+0

Okey, danke trotzdem :) – definera

Antwort

7

Die Struktur TermCriteria ist

TermCriteria(

int type, // CV_TERMCRIT_ITER, CV_TERMCRIT_EPS, or both 

int maxCount, 

double epsilon 
); 

Normalerweise verwenden wir die TermCriteria() Funktion erzeugen, die Struktur, die wir brauchen. Das erste Argument dieser Funktion ist entweder CV_TERMCRIT_ITER oder CV_TERMCRIT_EPS, die den Algorithmus sagt, dass wir entweder nach einer Anzahl von Iterationen oder wenn die Konvergenz Metrik erreicht einen kleinen Wert (jeweils) beenden wollen. Die nächsten beiden Argumente legen die Werte fest, bei denen der eine, der andere oder beide dieser Kriterien den Algorithmus beenden sollen.

Der Grund, warum wir beide Optionen haben, ist, dass wir den Typ auf CV_TERMCRIT_ITER | setzen können CV_TERMCRIT_EPS und damit stoppen, wenn eines der Grenzwerte erreicht ist.

3

Die genaue Bedeutung des Epsilon-Terms hängt von dem Algorithmus ab, für den das Abbruchkriterium bestimmt ist. (Siehe S. 299-300 des Learning OpenCV Buch für einige weitere Details über cvTermCriteria)

Hier, speziell aus dem documentation:

... der Prozess der Ecklage Verfeinerung stoppt entweder nach criteria.maxCount Iterationen oder wenn sich die Eckposition bei einer Iteration um kleiner als criteria.epsilon bewegt.

So gibt das epsilon Begriff die Genauigkeit, die Sie in Ihren Subpixel-Werten benötigen, beispielsweise ein Wert von 0.0001 bedeutet, dass Sie für Subpixel-Werte bis zu einer Genauigkeit von 1/10000. einen Pixel fragen. (Siehe S. 321 des Learning OpenCV Buches)

Verwandte Themen