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.

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.
IMREAD_GRAYSCALE A beolvasott képmátrix 1 csatornás szürke lesz.
IMREAD_COLOR 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.

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.

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. Az első beolvasás eredménye egy (249, 202) méretű tömb. A színes beolvasás (249, 202, 3) méretűt ad. A szürkeárnyalatos konverzió után újra (249, 202) méretet kapunk.

01_02_ocv_grayscale.py

# OpenCV2 képbeolvasás, szürkeárnyalatos konverzió
# OpenCV online dokumentáció: https://docs.opencv.org/3.4.0/

# 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