2016-04-18 15 views
0

Ich versuche, meinen OpenCV-basierten Code zu ändern, um vertrauliche Informationen mit jedem erkannten Objekt aus einem Kaskadenklassifizierer zu erhalten. Wenn ich the overloadCascadeClassifier 's detectMultiScale Methode aufrufen, die Parameter für rejectLevels und levelWeights (und pass wahr für outputRejectLevels) herausnimmt, wird der Aufruf nie abgeschlossen. Intern wird der Aufruf an detectMultiScaleNoGrouping schnell beendet, aber Millionen von Objekten zurückgegeben. Wenn ich keinen der Extra-Out-Parameter übergebe und outputRejectLevels auf false setze, gibt dieser Aufruf 60 Objekte zurück, und der Rest der Funktion funktioniert einwandfrei.DetectMultiScale kehrt nie zurück, wenn Überlast mit rejectLevels und levelWeights aufgerufen wird

Soll ich diese Überladung nicht nennen? Oder gibt es einen anderen Grund dafür, dass so viele Werte zurückgegeben werden, dass die Funktion niemals endet? Wie kann ich das richtig machen?

Hinweis: Ich sehe another question, die auf das gleiche Problem verweist, aber es enthält nicht viele Informationen über das Problem selbst und hat keine Antworten erhalten.

+0

Sie können dieses Problem betrachten: [extended detectMultiscale schlägt fehl, wenn Ablehnungsstufen angefordert werden # 6022] (https://github.com/Itseez/opencv/issues/6022). – Catree

+0

Danke @Catree für den Zeiger - ich habe ein bisschen gegraben und konnte die Lösung finden. –

Antwort

0

Es stellt sich heraus, dass dies im Master-Zweig von OpenCV behoben wurde, aber noch nicht veröffentlicht wurde (Stand: 18. April 2016). Ich habe bestätigt, dass die manuelle Anwendung des Patches und das erneute Erstellen das Problem behebt.

Die relevante Diskussion ist here und die PR, die enthalten sein muss, um das Problem zu beheben, ist this one. Es handelt sich um eine einzeilige Änderung, daher sollte es einfach sein, sie manuell zu implementieren, bis sie einen offiziellen Build mit der darin enthaltenen Änderung veröffentlicht.