Skip navigation

Szürkeárnyalatos konverzió

Miért fontos?

Számos alacsony szintű képfeldolgozó művelet szürkeárnyalatos intenzitásképeken kerül definiálásra. Szürkeárnyalatos fotók esetén leggyakrabban a [0, 255] intenzitástartomány használt. A 0 érték jelenti a fekete, a 255 a fehér színt. A köztes értékek a feketéből fehérbe tartó szürke átmenetet jelentik.

A fotóink, képeink rendszerint színesek, ezeket át kell alakítanunk szürkeárnyalatosra a fent említett műveletek végrehajtása előtt. Az OpenCV többféle lehetőséget is biztosít erre.

Az egyik megoldás, hogy már a kép betöltését szürkeárnyalatosként kérjük az IMREAD_GRAYSCALE értékkel. Az imread() függvény második paramétere ezt szabályozza.

cv2.IMREAD_UNCHANGED A képmátrix típusát a fájl tartalma határozza meg. A színes képek 3 csatornás BGR mátrixként, a szürkekárnyalatosak 1 csatornás szürkeárnyalatos képként kerülnek beolvasásra. Mindenképpen ezt használjuk, ha 4 csatornás (RGBA) képet olvasunk be!
cv2.IMREAD_GRAYSCALE A beolvasott képmátrix 1 csatornás szürke lesz.
cv2.IMREAD_COLOR

Ez az alapértelmezett működés.

A beolvasott képmátrix 3 csatornás BGR mátrix lesz. Ha szürkeárnyalatos a bement, akkor mindhárom csatornára a beolvasott szürkeárnyalatos értékek kerülnek beállításra. Eltávolítja az esetleges további (például átlátszósági) csatornákat.

További paramétermegadási lehetőségeket az OpenCV dokumentációban találunk az ImreadModes kulcsszónál.

A másik lehetőség a cvtColor() függvény használata, ami számos színtér reprezentáció közötti átalakítást képes elvégezni. Ennek részleteit a következő oldalon tárgyaljuk.

Megjegyezzük, hogy a szürkeárnyalatos fényességi érték (Y) a három színcsatorna (R, G, B) súlyozott átlagaként számítható az alábbi képlet szerint:

Y = 0.299 \cdot R + 0.587 \cdot G + 0.114 \cdot B

A fenti megközelítések is így működnek.

Példaprogram

01_02_ocv_grayscale.py példaprogramban a kétféle szürkeárnyalatos konverzió használatát láthatjuk. Mindkét változat esetén kiírjuk a konzolra a Numpy képmátrixok méretét is. Figyeljük meg, hogy az első beolvasás eredménye egy (249, 202) méretű tömb, vagyis 249 sorból és 202 oszlopból áll. A színes beolvasás (249, 202, 3) méretűt ad. A szürkeárnyalatos konverzió után pedig újra (249, 202) méretet kapunk. Vagyis ha a képünk egycsatornás, akkor két dimenziós a képmátrix. Többcsatornás (színes) kép esetén a harmadik dimenzió a csatorna dimenziója lesz. A képmátrixok reprezentálását a következő fejezetben tárgyaljuk alaposabban.

01_02_ocv_grayscale.py

# OpenCV2 képbeolvasás, szürkeárnyalatos konverzió
# OpenCV online dokumentáció: https://docs.opencv.org/ # OpenCV modul definíciók importálása import cv2 # Kép beolvasása fájlból szürkeárnyalatosként imgr = cv2.imread('OpenCV-logo.png', cv2.IMREAD_GRAYSCALE) # Képméret kiíratása konzolra print(imgr.shape) # Kép megjelenítése ablakban cv2.imshow('image', imgr) cv2.waitKey(0) # Kép beolvasása fájlból imgc = cv2.imread('OpenCV-logo.png', cv2.IMREAD_COLOR) print(imgc.shape) imgr2 = cv2.cvtColor(imgc, cv2.COLOR_BGR2GRAY) print(imgr2.shape) # Kép megjelenítése ablakban cv2.imshow('image', imgr2) cv2.waitKey(0)

Szürkeárnyalatos eredmény