Skip navigation

Képmanipulációs feladatok

Maszk körvonal rajzolás továbbfejlesztése

  • A maszkolás alfejezetben látott példát módosítsuk úgy, hogy a körvonal vörös helyett más színnel legyen megjelenítve! (Kék, zöld, cián, narancssárga, lila, ...)
  • A színes körvonal rajzolást készítsük el szürkeárnyalatos bementi képre is! (Ötlet: a szürke bemeneti képet alakítsuk át szürkéből színes reprezentációba.)

Keret rajzolás

Rajzoljunk a képmátrixba képkeretet! Megadható legyen a keret mérete és színe/intenzitása! Kétféle megoldás is szóba jöhet:

  • Az eredeti kép szélső sora és oszlopai felülíródnak a keret mérete szerint.
  • A megadott keretmérettel bővített új képmátrixot hozunk létre.

Eredmény az OpenCV-logo.png képre 15 méretű kerettel, [0, 192, 192] sárgásbarna színnel:

Képbe rajzolt keret Kép köré rajzolt keret

Automatikus képkivágás

Képenyőképek készítésekor gyakori probléma, hogy nagy és egyenetlen méretű, de egyforma színű/intenzitású keret jelenik meg. A feladat az, hogy ilyen képek esetén határozzuk meg a kerettől eltérő színű/intenzitású terület befoglaló téglalapját, és ennek a tartalmát másoljuk át egy olyan képmátrix közepére, ahol az átalunk megadott méretű keret áll elő!

  • A körülvevő szín/intenzitás a képmátrix bal felső sarkában szereplő elem legyen.
  • Meg lehessen adni paraméterként, hogy az eredmény képen mekkora keret vegye körül a lényegi részt.
  • Figyeljünk arra, hogy ha nincs elegendő méretű keret a képen, akkor növelni szükséges a képmátrix méretét!

A megoldás az előző feladattal is kombinálható: 0 méretű keretre vágás után adjunk hozzá megadott méretű és színű keretet.

A bal oldalon az eredeti kép fehér kerettel (03_pr_formula.png), míg a jobb oldalon a 0 méretű keretre vágott eredmény.

További tesztképek a példatárban:

  • 03_pr_table.png
  • 03_pr_fig.png

Képek súlyozott összeadása

Képezzük két egyforma méretű kép súlyozott összegét! Fedezzük fel a cv2.addWeighted() függvény használati lehetőségét erre a célra! Ezzel a függvénnyel képpontonként konstans súlyokkal hajtódik végre az elegyítés. Segítséget ad az angol nyelvű dokumentációban az Image Blending rész.

Képek átlátszósági érték szerinti elegyítése

A képmátrixhoz adott, úgynevezett alfa csatorna segítségével képpontonként szabályozhatjuk a súlyokat, a színek átlátszóságát. A 0 érték jelenti a teljesen átlátszót, a 255 pedig a teljesen átlátszatlant. A köztes értékek esetén megfelelő súlyozással összeadjuk a két kép adott pontban található értékeit. A PNG képformátum biztosítja az ilyen 4 csatornás képek tárolását.

Fontos, hogy 4 csatornás PNG kép beolvasásakor adjuk meg a cv2.IMREAD_UNCHANGED paramétert a cv2.imread() függvénynek! Ekkor a szokásos BGR értékek mellett a negyedik (3-as indexű) lesz az átlátszósági érték.

A súlyok számítását az alábbi példán mutatjuk be. Tegyük fel, hogy a két elegyítendő képpont a [B1, G1, R1, A1] és a [B2, G2, R2].

W1 = A1 / 255.0
W2 = 1.0 - W1
B = B1 * W1 + B2 * W2
G = G1 * W1 + G2 * W2
R = R1 * W1 + R2 * W2

Menjünk végig a képmátrix minden pontján, és végezzük el a fenti számítások alapján az elegyítést! Látható, hogy ezzel a megközelítéssel a második képpont alfa csatorna információját nem használjuk fel.

Hasonló algoritmust hajtanak végre a böngészőmotorok, amikor egy nem konstans színű háttéren átlátszósági értékkel rendelkező képet jelenítenek meg a HTML oldalon.

Alfa csatornával rendelkező képeket találhatunk például a https://www.transparenttextures.com/ oldalon, vagy készíthetünk magunk is fejlettebb képmanipulátor programokkal, mint például PhotoShop vagy a GIMP.