count_relation
— Ermitteln der Anzahl der Einträge in der HALCON-Datenbank.
count_relation( : : RelationName : NumOfTuples)
count_relation
liefert die Anzahl NumOfTuples
der Einträge
in der Relation RelationName
der HALCON-Datenbank ab dem Zeitpunkt, an dem die Datenbank
mit dem Parameter 'database' von set_system
'database' eingeschaltet wurde. Ist die Datenbank ausgeschaltet,
ist NumOfTuples
0. Zusätzlich wird in diesem Fall eine
Warnung ausgegeben, falls 'do_low_error'
über set_system
gesetzt ist.
Der Zustand der Datenbank kann über den Parameter 'database'
mit get_system
erfragt werden.
Die HALCON-Datenbank ist aus fünf Tabellen ikonischer Datentypen aufgebaut, genannt Relationen. Die Einträge in diese Relationen werden allgemein Tupel genannt (nicht zu verwechseln mit einem HALCON-Tupel, was ein Objekt-Array bezeichnet). Ist die HALCON-Datenbank eingeschaltet, beinhaltet sie die Basisrelationen für Regionendaten, Bildmatrizen und XLDs sowie die Containerrelationen für HALCON-Objekte und HALCON-Tupel (Objekt-Array). Die HALCON-Objekte Region und Bild werden aus den Elementen der Regionendaten und Bildmatrix-Relationen aufgebaut: Eine Region besteht aus einem Zeiger auf ein Tupel in der Regionendatenrelation. Ein Bild besteht aus einem Zeiger auf ein Tupel in der Regionendatenrelation (wie eine Region) und zusätzlich aus einem oder mehreren Zeigern auf Tupel der Bildmatrixrelation. Mehrkanalbilder haben mehrere Zeiger auf Bildmatrix-Tupel.
Regionen und Bilder werden als Objekte bezeichnet. Man kann eine Region als den Spezialfall eines Bildes auffassen, das keine Bildmatrizen hat. Regionendaten und Bildmatrizen werden in HALCON aus Speicherplatzgründen üblicherweise von mehreren Objekten gemeinsam verwendet. So kann es beispielsweise mehr Bilder als Bildmatrizen geben. Relevant für den Speicherbedarf sind nur die drei Basisrelationen 'image' , 'region' und 'XLD' . Die HALCON-Objekte (Regionen und Bilder) und HALCON-Tupel bestehen nur aus Verweisen auf Regionen- und Matrixdaten und benötigen deshalb nur wenige Byte Speicher.
Mögliche Werte für RelationName
:
Bildermatrizen. Dabei kann die selbe Matrix auch Bestandteil mehrerer Bilder sein (keine redundante Speicherung).
Regionendaten. Dabei kann eine Region auch Bestandteil mehrerer Bildobjekte sein (keine redundante Speicherung).
eXtended Line Description: Konturen, Polygone, Parallele, Linen etc. XLD Daten haben keine Grauwerte und sind subpixelgenau.
HALCON-Bild-Objekte. Aufgebaut aus einer Region und optional einer oder mehrerer Bildmatrizen. Ein HALCON-Objekt bestehend aus einer Region wird Regionen-Objekt, mit zusätzlichen Bildmatrizen Bildobjekt bezeichnet.
Im Kompaktmodus werden Tupel von Bildobjekten unter einem Surrogat in dieser Relation gespeichert. Statt mit den einzelnen Objektschlüsseln wird dann nur mehr mit diesem Schlüssel gearbeitet. Es hängt von der Wirtssprache ab, ob die Objekte einzeln (z.B. C++) oder als Tupel (z.B. C) übergeben werden.
Gewisse Datenbank-Objekte werden bereits von reset_obj_db
angelegt
und müssen daher immer vorhanden sein (die undefinierte Grauwertkomponente,
die Objekte 'full' (FULL_REGION in HALCON/C) und
'empty' (EMPTY_REGION in HALCON/C) sowie die darin enthaltene leere
und volle Region).
reset_obj_db
erscheint dementsprechend bei einem Aufruf von
get_channel_info
auch als 'creator' der vollen und leeren Region.
Der Operator count_relation
dient beispielsweise dazu, den die
Vollständigkeit von clear_obj
Operation zu überprüfen.
Das Sammeln von Informationen für die Datenbank ist nicht thread-safe, wenn iconisch Objekte zwischen den Threads ausgetauscht werden, d.h. wenn Objekte in einem anderen Therad zerstört werden als in dem sie erzeugt wurden.
RelationName
(input_control) string →
(string)
Interessierende Relation der HALCON-Datenbank.
Defaultwert: 'object'
Werteliste: 'XLD' , 'image' , 'object' , 'region' , 'tuple'
NumOfTuples
(output_control) integer →
(integer)
Anzahl der Tupel in der Relation.
* Close the graphics window in order to close the graphics stack, * which would influence the measurement. dev_close_window () * Enable the measurement. set_system ('database','true') * count_relation ('image', I1) count_relation ('region', R1) count_relation ('XLD', X1) count_relation ('object', O1) count_relation ('tuple', T1) * * Result: * I1 = 0 * R1 = 0 * X1 = 0 * O1 = 0 * T1 = 0 * read_image (Patras, 'patras') * count_relation ('image', I2) count_relation ('region', R2) count_relation ('XLD', X2) count_relation ('object', O2) count_relation ('tuple', T2) * * I2 = 3 (three channels of the rgb image 'patras') * R2 = 1 (the image domain of the image 'patras') * X2 = 0 (no XLD data) * O2 = 1 (the iconic object holding the channels and the domain) * T2 = 0 (no empty object or object array )
Ist der Parameter korrekt, dann liefert count_relation
den
Wert 2 (H_MSG_TRUE). Ansonsten wird eine Fehlerbehandlung ausgeführt.
Foundation