2011-01-08 9 views
2

Ich verwende OpenCV, um zwei Blobs in zwei Bildern zu vergleichen. Angenommen, ich kenne ein Paar Blobs, die wahrscheinlich ähnlich sind, und ich kenne ihre Indizes in den Kontur-Arrays (generiert von cvFindContours()), wie bekomme ich Zugriff auf eine Kontur in einer konstanten Zeit?OpenCV: Wie kann man nach Aufruf cvFindContours() auf eine Kontur in O (1) zugreifen?

Die umständlichste Methode ist es, die Verknüpfungsoperation (contours = contours -> h_next) mehrmals zu verwenden, aber ich frage mich, ob es eine schnellere Möglichkeit gibt, eine Kontur in einem Array abzurufen.

Ich benutze CV_RETR_EXTERNAL und CV_CHAIN_APPROX_NONE beim Aufruf von cvFindContours().

Danke! -J.C.

Antwort

2

Ich denke, die Funktion cvGetSeqElem macht was Sie wollen. Zitieren der OpenCV docs: "Die Funktion hat O (1) Zeit Komplexität unter der Annahme, dass die Anzahl der Blöcke viel kleiner ist als die Anzahl der Elemente." Ich nehme an, dass "Blöcke" in diesem Zusammenhang "Konturen" bedeuten.

Schauen Sie sich auch cvCvtSeqToArray (link) an, die eine Sequenz in einen fortlaufenden Speicherblock kopiert.

+0

Danke für die Kommentare! Ich denke, cvGetSeqElem ist nicht was ich will: Es ruft ein Element aus einer Sequenz ab - in diesem Fall ist es ein Punkt auf einer Kontur. Ich stimme zu, dass cvCvtSeqToArray die Arbeit machen kann, aber wie Sie vielleicht bemerken, ist es schwierig, Konturen wie diese zu manipulieren (neu/löschen, Speicherkopie, etc ...). – galactica

Verwandte Themen