Dies muss für C++ - Entwickler, die OpenCV direkt verwenden, einfach sein. Was ich jedoch benutze, ist Emgu (ein OpenCV-Wrapper für .NET) und in der neuesten Version haben wir die Methode CvInvoke.FindContours
, die void zurückgibt, das Ausgabeergebnis wird von Parameterreferenz übergeben und hat den Typ VectorOfVectorOfPoint
.Navigieren durch die Hierarchie der Konturen, die von der FindContours-Methode gefunden wurden?
Hier ist ein einfacher Aufruf:
//outputResult is a VectorOfVectorOfPoint
CvInvoke.FindContours(inputImage, outputResult, null, RetrType.Tree,
ChainApproxMethod.ChainApproxSimple);
Für RetrType.List
-Modus können wir das Ergebnis bis zu einem gewissen Array von Arrays und eine Schleife durch alle Konturen leicht umbauen. Aber hier möchte ich durch alle Konturen in einem Baum navigieren. Ich denke, wir müssen etwas mit nativem (unsicheren) C++ Code hier mit Zeiger (Zugriff über die Ptr
Eigenschaft des Ausgangsergebnisses) tun. Aber ich frage mich, ob es dafür eine .NET-freundliche Lösung gibt. Und wenn sogar die Verwendung von Pointer die einzige Lösung ist, weiß ich immer noch nicht, wie ich in diesen Ptr
eintauchen soll, um durch den Konturenbaum zu navigieren.
Die Beispielcodes, die mit der Emgu-Installation einhergehen, enthalten stattdessen ein Snippet, das CvInvoke.FindContourTree
verwendet (und das eine int[,]
zurückgibt).
Wird die Hierarchie nicht im dritten Parameter ausgegeben, den Sie auf null setzen? Sie können countours genauso aufzählen, ob Sie RetrType.List oder Tree verwenden, um Hierarchieinfo zu erhalten, eine neue Variable vom Typ Mat zu erstellen und diese als dritten Parameter (der jetzt null ist) übergeben. – Evk
@Evk Ja, mir war nicht klar, dass ich auf der dritten Position vorbeigehen sollte, und selbst wenn ich davon wüsste, hätte ich nicht gewusst, um welchen Typ es sich handelt. Jetzt lassen Sie mich wissen, ich sollte in einer 'Mat' passen. Aber ich habe gerade versucht, mehr über diesen Typ zu finden, und es scheint keine einfach zu erkennenden Mitglieder zu haben, die mir helfen, durch den Baum zu navigieren. Wenn möglich, geben Sie mir bitte einen Beispielcode in Ihrer Antwort. Das wäre sehr geschätzt. Vielen Dank! – Hopeless