Find Contour - Hierarchy & Retrieval Mode

Dieses Beispiel zeigt den Retrieval-Mode (ETcVnContourRetrievalMode) bei der Kontursuche (F_VN_FindContoursExp und F_VN_FindContourHierarchyExp) und wie sich dieser auf das Konturergebnis und die zurück gegebene Hierarchie auswirkt.

Erläuterung

Über den Konturabrufmodus (eRetrievalMode vom Typ ETcVnContourRetrievalMode) kann angegeben werden, wie die Konturhierarchie bei der Kontursuche berücksichtigt werden soll. Dieses Beispiel visualisiert passend zum ausgewählten Modus die Ergebnisse.

Nähere Erläuterungen zur Hierarchiestruktur in F_VN_FindContourHierarchyExp.

Variablen

hr                   :   HRESULT;

ipImageIn            :   ITcVnImage;
ipImageInDisp        :   ITcVnDisplayableImage;

ipImageRes           :   ITcVnImage;
ipImageResDisp       :   ITcVnDisplayableImage;

ipImageHierarchy     :   ITcVnImage;
ipImageHierarchyDisp :   ITcVnDisplayableImage;

// Sample Specific Variables
ipContourList        :   ITcVnContainer;
ipContour            :   ITcVnContainer;
ipHierarchyList      :   ITcVnContainer;
aHierarchy           :   TcVnVector4_DINT;
aHierarchyTree       :   TcVnVector4_DINT;
eRetrievalMode       :   ETcVnContourRetrievalMode := TCVN_CRM_LIST;
eApproximationMethod :   ETcVnContourApproximationMethod := TCVN_CAM_SIMPLE;
aOffset              :   TcVnPoint;

nNumOfElem           :   ULINT;
nParents             :   UINT;
i                    :   ULINT;
j                    :   ULINT;
stRect               :   TcVnRectangle_UDINT;
sText                :   STRING(80);
    
// Colors    
aColorWhite          :   TcVnVector4_LREAL := [255, 255, 255];
aColorBlack          :   TcVnVector4_LREAL := [0, 0, 0];
aColorList           :   ARRAY[0..4] OF TcVnVector4_LREAL := [ [255,0,0], [0,255,0], [0,0,255], [200,200,0], [200,0,200]];

Code

// Create Result Image
hr := F_VN_ConvertColorSpace(ipImageIn, ipImageRes, TCVN_CST_Gray_TO_RGB, hr);
hr := F_VN_CreateImage(ipImageHierarchy, 130, 200, EtcVnElementType.TCVN_ET_USINT, 3, hr);
hr := F_VN_SetPixels(ipImageHierarchy, aColorWhite, hr);

// Find Contours and their Hierarchy
// -----------------------------------
hr := F_VN_FindContourHierarchyExp(
               ipSrcImage             :=   ipImageIn,
               ipContours             :=   ipContourList, 
               ipHierarchy            :=   ipHierarchyList, 
               eRetrievalMode         :=   eRetrievalMode, 
               eApproximationMethod   :=   eApproximationMethod, 
               aOffset                :=   aOffset, 
               hrPrev                 :=   hr);


hr := F_VN_GetNumberOfElements(ipContourList, nNumOfElem, hr);

IF nNumOfElem > 0 THEN
   FOR i:= 0 TO (nNumOfElem-1) BY 1 DO

      hr := F_VN_GetAt_ITcVnContainer(ipContourList, ipContour, i, hr);
      hr := F_VN_GetAt_TcVnVector4_DINT(ipHierarchyList, aHierarchy, i, hr);

      // Count Parents and set aColor depending on parent number
      nParents := 0;
      aHierarchyTree := aHierarchy;
      WHILE SUCCEEDED(hr) AND_THEN aHierarchyTree[3] >= 0 DO
         nParents := nParents + 1;
         hr := F_VN_GetAt_TcVnVector4_DINT(ipHierarchyList, aHierarchyTree, aHierarchyTree[3], hr);
      END_WHILE

      // Draw contour and number into the result image
      sText := TO_STRING(i);
      hr := F_VN_UprightBoundingRectangle(ipContour, stRect, hr);
      hr := F_VN_PutText(sText, ipImageRes, stRect.nX +10, stRect.nY +15, TCVN_FT_HERSHEY_PLAIN, 1, aColorList[(nParents) MOD 4], hr);
      hr := F_VN_DrawContours(ipContour, -1, ipImageRes, aColorList[(nParents) MOD 4], 2, hr);

      // Write Hierarchy
      hr := F_VN_PutText(sText, ipImageHierarchy, 10, TO_UDINT(10 + i*10), TCVN_FT_HERSHEY_PLAIN, 0.5, aColorList[(nParents) MOD 4], hr);
      FOR j := 0 TO 3 BY 1 DO
         sText := TO_STRING(aHierarchy[j]);
         hr := F_VN_PutText(sText, ipImageHierarchy, TO_UDINT(10 + (j+1)*22), TO_UDINT(10 + i*10), TCVN_FT_HERSHEY_PLAIN, 0.5, aColorBlack, hr);
      END_FOR
   END_FOR
END_IF

Ergebnisse

Das Eingangsbild

Find Contour - Hierarchy & Retrieval Mode 1:

Die gefundenen Konturen bei TCVN_CRM_TREE. Gleiche Farben geben Konturen auf gleicher Ebene wieder

Find Contour - Hierarchy & Retrieval Mode 2:

Die Hierarchie zum obigen Ergebnisbild. Dabei bezieht sich jede Zeile jeweils auf eine Kontur und die Spaltenbedeutung ist wie folgt:

Die Zahl -1 gibt an, dass keine entsprechende Kontur existiert.

Find Contour - Hierarchy & Retrieval Mode 3:

Ähnliche Beispiele