opencv 3, blobdetection, Die Funktion / das Feature ist in detectAndCompute nicht implementiert ()

8

Ich habe ein Problem mit opencv 3: Ich möchte einen Feature-Detektor, SimpleBlobDetector, verwenden, um Filter nach Konvexität und Kreisförmigkeit zu verwenden. Aber wenn ich versuche, den Code auszuführen, wird der folgende Fehler verfolgt:

  

Die Funktion / Funktion ist in detectAndCompute

nicht implementiert ()

Dann stürzt die Anwendung ab.

Ich habe im Internet nach Informationen gesucht, ohne eine relevante Antwort zu geben. Ich denke, die dritte Version von Opencv könnte für diesen Fehler verantwortlich sein, weil ich weiß, dass ich den Detektor auf die gute Art nutze (ich habe es genau wie das offizielle opencv-Tutorial versucht) und bemerkt, dass der SimpleBlobDector für die dritte Version modifiziert wurde. p>

Wenn ich einen Haltepunkt verwende, weiß ich, dass die folgende Zeile abstürzt:

  

detector.detect (grau, keypoints);

Der SimpleBlobDetector wurde erstellt (mit der create-Funktion) und konfiguriert, das graue Bild ist nicht leer und der keypoints-Vektor muss nicht vor der Erkennung gefüllt werden.

Ich benutze opencv 3.0.0, kompiliert in MinGW mit QtCreator. Die opencv-Behandlung wird nicht vom Hauptthread gestartet.

Hat jemand anderes das gleiche Problem? Ich wäre dankbar, wenn ich einen Patch oder eine andere Lösung mit einer anderen Klasse hätte. Ich muss wirklich Konvexität verwenden, um meine Blobs zu filtern, und die anderen Detektoren, die ich fand (FeatureDetector oder Brisk), können nicht konfigurierbar sein und geben nur Keypoints zurück, die keine Flächen- oder Fülle-Parameter zur Berechnung der Konvexität haben.

Vielen Dank im Voraus

    
Vincent Lartaud 03.06.2015, 13:58
quelle

4 Antworten

12

Dies liegt daran, dass Sie OpenCV 3.X verwenden, wo (zum jetzigen Zeitpunkt) alle Beispiele, die Sie online finden, OpenCV 2.X verwenden.

Wenn Sie jedoch herumkramen, finden Sie den Übergangsleitfaden: Ссылка

Welche besagt, dass Sie verwenden müssen:

%Vor%

Anstelle von:

%Vor%

In diesem Fall müssen Sie Folgendes verwenden:

%Vor%

Oder:

%Vor%

Wenn Sie Params haben.

    
David Wolever 08.12.2015 07:12
quelle
11

Das sieht so aus, als wäre es gelöst, aber vielleicht hilft es jemand anderem. Ich hatte das gleiche Problem. Ich habe einen Blob-Detektor wie folgt erstellt:

%Vor%

Dies endete mit einem Fehler: The function/feature is not implemented () in detectAndCompute .

Aber wenn ich es so versuchte:

%Vor%

Jetzt funktioniert alles wie erwartet.

Es ist wirklich seltsam und wenn jemand weiß, warum so funktioniert, lass es mich bitte wissen.

    
benderto 12.08.2015 10:44
quelle
2

Danke für die Antwort.

Ich benutze erkennen (wie ich in meiner vorherigen Nachricht gesagt habe). Ich denke, die Erkennungsfunktion verwendet wahrscheinlich detectAndCompute.

Das Fehlen eines Deskriptors kann tatsächlich das Problem sein, da ich bereits ein ähnliches Problem mit Emgu (der C # -Version von opencv) hatte, bis ich eine Entwickler-Notiz fand, dass die Methode noch nicht korrigiert wurde und der Deskriptor die Ursache war .

Für andere, die das gleiche Problem haben, habe ich cv :: findContours anstelle des Blobdetektors benutzt. Es funktioniert viel besser, ohne Probleme. Um die Konvexitätserkennung zu ersetzen, können Sie sie mithilfe der Fülle (Formbereich / Begrenzungsrahmenbereich) auswerten. Verwenden Sie die folgende Formel, um die Kreisform zu ersetzen:

  

Kreisfläche / Begrenzungsboxbereich = PI / 4

Ich hoffe, das wird anderen Menschen Hoffnung machen.

    
Vincent Lartaud 04.06.2015 09:04
quelle
0

Verwenden Sie nur detect (...) und nichtAndCompute (...). Es ist kein Feature-Deskriptor für die Blob-Erkennung definiert.

Siehe hier: Ссылка

    
Viatorus 03.06.2015 14:29
quelle

Tags und Links