F_VN_FindContours
Search for object contours in a binary image. Returns only external contours.
Can use available TwinCAT Job Tasks for executing parallel code regions.
Can return partial results when canceled by Watchdog.
Syntax
Definition:
FUNCTION F_VN_FindContours : HRESULT
VAR_INPUT
ipSrcImage : ITcVnImage;
ipContours : Reference To ITcVnContainer;
hrPrev : HRESULT;
END_VAR
Inputs
Name |
Type |
Description |
---|---|---|
ipSrcImage |
Source image (1 channel, binary) | |
ipContours |
Reference To ITcVnContainer |
Returns a container which is filled with the found contours (ContainerType_Vector_Vector_TcVnPoint2_DINT; The elements of this container are single contours. Non-zero interface pointers are reused.) |
hrPrev |
HRESULT indicating the result of previous operations (If SUCCEEDED(hrPrev) equals false, no operation is executed.) |
Weiterführende Informationen
Die Funktion F_VN_FindContours
detektiert äußere Konturen im Eingangsbild.
Parameter
Eingangsbild
Das Eingangsbild ipSrcImage
muss genau 1 Kanal haben und sollte ein Binärbild sein.
Falls das Eingangsbild kein Binärbild ist, wird es intern mittels eines Schwellwerts von 1 in eins umgewandelt. Daher sollte das Eingangsbild manuell mit einem Schwellwert oder einer binären Segmentierung vorverarbeitet werden.
Liste an gefundenen Konturen (Rückgabewert)
Alle im Eingangsbild gefundenen Konturen werden in dem Container ipContours
zurückgegeben. Der Container ist ein zweidimensionales Array von Punkten und hat daher den Typ ContainerType_Vector_Vector_TcVnPoint2_DINT
.
Zurückgegeben werden die gefundenen Konturen in ipContours
. Dabei setzt sich jede Kontur aus einer Summe von Punkten zusammen, welche in einem Container zusammengefasst werden. Ein weiterer übergeordneter Container fasst dann nochmal alle Konturen zusammen.
Expert-Parameter
Die Expert-Variante F_VN_FindContoursExp enthält zusätzliche Parameter. Damit können z. B. auch innere Konturen gefunden werden.
Anwendung
Das Finden und Verarbeiten von Konturen sieht z. B. so aus:
Vorverarbeitung
Da für das Eingangsbild ipSrcImage
ein Binärbild verwendet werden soll, sollte vor dem Funktionsaufruf ein Schwellwert oder eine Binär-Segmentierung auf das Bild angewandt werden, z. B. mit der Funktion F_VN_Threshold:
hr := F_VN_Threshold(ipImageIn, ipImageWork, 128, 255, TCVN_TT_BINARY, hr);
Funktionsaufruf
Bei dem Funktionsaufruf ist nichts Weiteres zu beachten. Eine Einstellung von Parametern ist nur bei der Expert-Variante F_VN_FindContoursExp nötig.
hr := F_VN_FindContours(
ipSrcImage := ipImageIn,
ipContours := ipContours,
hrPrev := hr
);
Weiterverarbeitung
Mit F_VN_GetForwardIterator kann ein Iterator auf den übergeordneten Container geholt werden, der es ermöglicht, nacheinander die Container der einzelnen Konturen über F_VN_GetContainer abzurufen, um diese dann zum Beispiel mit den Contour Analysis Funktionen zu analysieren. Denken Sie dabei daran, den Iterators mit F_VN_IncrementIterator zu inkrementieren.
hr := F_VN_GetForwardIterator(ipContours, ipIterator, hr);
WHILE SUCCEEDED(hr) AND_THEN ipIterator.CheckIfEnd() <> S_OK DO
hr := F_VN_GetContainer( ipIterator, ipContour, hr);
hr := F_VN_IncrementIterator(ipIterator, hr);
// Analyse the single contour in ipContours with the contour analysis functions
END_WHILE
Alternativ können Sie eine einzelne Kontur auch über F_VN_GetAt_ITcVnContainer aus dem Container aller Konturen abrufen.
Die Anzahl der gefundenen Konturen können Se über F_VN_GetNumberOfElements abfragen.
Visualisierung
Zum Zeichnen der gefundenen Konturen verwenden Sie die Funktion F_VN_DrawContours(Exp).
hr := F_VN_DrawContours(
ipContours := ipContours,
nContourIndex := -1,
ipDestImage := ipImageRes,
aColor := aColorRed,
nThickness := 5,
hrPrev := hr
);
Durch das Setzen von nContoursIndex
auf -1
werden alle Konturen in der Kontur-Liste ipContours
gezeichnet.
Beispiele
Verwandte Funktionen
- F_VN_FindContours(Exp) zur allgemeinen Kontur-Findung
- F_VN_FindContourHierarchyExp mit Rückgabe der Hierarchie
- F_VN_DetectBlobs mit integrierter Filterung der Konturen
Required License
TC3 Vision Base
System Requirements
Development environment | Target platform | PLC libraries to include |
---|---|---|
TwinCAT V3.1.4024.59 or later | PC or CX (x64) with PL50, e.g. Intel 4-core Atom CPU | Tc3_Vision |