Alakjellemzők számítása kontúr alapján
A cv2.findContours() által visszaadott eredményt felhasználva további számításokat végezhetünk a reprezentált alakzaton.
Figyeljünk arra, hogy a cv2.findContours() függvény kontúrok egy listáját adja vissza, a feldolgozó függvények viszont egy-egy kontúrral dolgoznak. Vagyis célszerű például ciklussal bejárni a lista elemeit feldolgozáskor.
Néhány példa:
retval = cv2.contourArea(contour, oriented) |
Kontúr által közrezárt terület. Ha az oriented paraméter True, akkor előjeles eredményt kapunk a kontúr körüljárási irányától függően. False az alapértelmezett. Megjegyzés: a függvény a kontúr által közrezárt teljes területet adja eredményül, nem a benne foglalt objektumpontok számát! Ez üreges objektumok esetén nem ugyanaz. Ha az objektumhoz tartozó objektumpontok darabszámát szeretnénk megkapni, akkor:
|
retval = cv2.arcLength(contour, closed) |
Kontúr hossza. A closed értéke legyen True. (A függvény pontlistákra is működik, nem csak kontúrokra, ott szükség lehet a False értékre is.) |
hull = cv2.convexHull(points[, hull[, clockwise[, returnPoints]]]) | Konvex burok meghatározása: minimális területű befoglaló poligon, amely konvex. |
retval = cv2.isContourConvex(contour) | Konvexitás vizsgálat, logikai eredménnyel. |
x, y, w, h = cv2.boundingRect(contour) | Álló helyzetű befoglaló téglalap meghatározása. A bal felső sarok és méret értékeket kapjuk vissza egész típusú számokként. |
rect_center, rect_size, rect_angle = cv2.minAreaRect(contour) |
Legkisebb területű (forgatott) befoglaló téglalap. Eredményül megkapjuk a téglalap középpont koordinátáját, a méretét (szélesség és magasság), valamint az elforgtási szögét. Minden érték lebegőpontos típusú. Ha a téglalapot a képmátrixba szeretnénk rajzolni, akkor meg kell határozni a 4 csúcspont egész típusú koordinátáit. Ebben segít a cv2.boxPoints() függvény és a Numpy: box = cv2.boxPoints((rect_center, rect_size, rect_angle)) |
Angol nyelvű OpenCV dokumentáció