Az OpenCV lehetőséget biztosít képmátrixba egyszerű raszteres grafikus elemek, mint például kör, vonal, szöveg elhelyezésére.
Példa kör rajzolásra
cv2.circle(im, (50, 100), 40, (0, 0, 192), -1)
Ez az im képmátrixban helyez el kört (50, 100) középponttal, 40 pixel sugárral, 192 fényességértékű vörös színnel, alapértelmezett vonalvastagsággal, negatív érték esetén kitöltött belső területtel (pozitív értékkel csak a körvonalat rajzolja).
Fontos! Az OpenCV a koordinátákat (oszlop, sor) sorrendben értelmezi, ellentétben a Numpy konvencióval! Mindig figyeljünk arra, hogy Numpy tömbelérést, vagy OpenCV függvényhívást végzünk a koordináták megadásakor!
Emlékeztetőül: A paraméterlistában kerek zárójelek között megadott értékek egy darab, felsorolási (tuple) paraméterértéknek értelmeződnek!
A szín tuple érték helyett skalár számértéket is megadhatunk, például szürkeárnyalatos képmátrixba rajzolva célszerű is ilyet használni.
A vonalvastagság képpontban értendő. Negatív érték esetén kitöltött belső területtel rajzol, pozitív értékkel csak a körvonal jelenik meg.
Vonal
cv2.line(im, (kezdo_x, kezdo_y), (veg_x, veg_y), (b, g, r), vastagsag)
Téglalap
cv2.rectangle(im, (bal_felso_x, bal_felso_y), (jobb_also_x, jobb_also_y), (b, g, r), vastagsag)
Ellipszis
cv2.ellipse(im, (kozep_x, kozep_y), (fotengely_hossz, mellektengely_hossz),
fotengely_szog, kezdoszog, zaroszog, (b, g, r), vastagsag)
A főtengely szögének kezdőállása az X-tengely iránya. A pozitív körüljárási irány az óramutató járásával ellentétes. Az értékek fokban értelmeződnek.
A kezdőszög és zárószög megadásával elliptikus ívet rajzolhatunk.
Sokszög körvonalak és kitöltött sokszögek
cv2.fillPoly(im, pts, szín[, vastagság])
cv2.polylines(im, pts, isClosed, szín[, vastagság])
A könyebb érthetőség kedvéért egy konkrét példát is megadunk:
contour1 = np.array([[130, 20], [150, 150], [250, 150], [280, 50]])
cv2.fillPoly(im, [contour1], color=(0, 192, 0))
cv2.polylines(im, [contour1], isClosed=True, color=(192, 0, 0), thickness=5)
Egy síkidom csúcspontjait egy kontúr tömbben (contour1) fel kell sorolni [x, y] sorrendben. Kitöltött sokszöget a cv2.fillpoly(), sokszög körvonalat a cv2.polylines() függvénnyel rajzolhatunk. Mindkettő második paramétere egy lista (pts), amely kontúr tömböket tartalmaz. Itt akár több kontúrt is felsorolhatunk, viszont akkor is listába kell rendezni, ha csak egy kontúrt akarunk kirajzoltatni.
A körvonal rajzolás esetén meg kell adnunk, hogy zárt-e a kontúr (isClosed). Ha igen, akkor automatikusan összekötésre kerül az utolsó pont a legelsővel. Kitöltött síkidom esetén nyilvánvaló, hogy zárt kell legyen, így nem is kell paraméterként átadni.
Szöveg elhelyezése
cv2.putText(im, 'Szoveg', (bazispont_x, bazispont_y), font, betumeret, (b, g, r), vastagsag, vonaltipus)
A bázispont a szöveg kezdőpontját adja. A karakterek a bázisvonalra kerülnek, vagyis ez az első karakter bal alsó pontja. Ne feledjük, hogy bizonyos betűk szára a bázisvonal alá lóghat!
A font a betűtípus azonosítója. Az OpenCV dokumentációban találunk használható konstansokat (pl. cv2.FONT_HERSHEY_SIMPLEX, cv2.FONT_HERSHEY_SCRIPT_SIMPLEX, ...).
A vonaltípus a betűk megrajzolásakor használt vonalak típusát jelenti. Szöveg esetén érdemes a cv2.LINE_AA használata a szebb eredményhez.
További rajzoló függvények (angol nyelvű dokumentáció)