F_VN_FindContours

F_VN_FindContours 1:

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

F_VN_FindContours 2: Inputs

Name

Type

Description

ipSrcImage

ITcVnImage

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

HRESULT indicating the result of previous operations (If SUCCEEDED(hrPrev) equals false, no operation is executed.)

F_VN_FindContours 3: Return value

HRESULT

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

Required License

TC3 Vision Base

System Requirements

Development environment

Target platform

PLC libraries to include

TwinCAT V3.1. 4024.44 or later

PC or CX (x64) with PL50, e.g. Intel 4-core Atom CPU

Tc3_Vision