Skip navigation

Színcsatornák kezelése

Színcsatornák szétválasztása és egyesítése

Egy többcsatornás kép szétbontható különálló intenzitás csatornákra az OpenCV split() függvényével. Eredményképpen egy felsorolási (tuple) típusú Python objektumot kapunk, amely BGR színes kép esetén három Numpy tömböt sorol fel. Az eredményt átvenni így tudjuk:

imgc = cv2.imread('GolyoAlszik_rs.jpg', cv2.IMREAD_COLOR)
b, g, r = cv2.split(imgc)

Ne felejtsük el, hogy az OpenCV BGR sorrendben tárolja a színcsatornákat! Ezután a b, g és r tömbökkel mint szürkeárnyalatos, egycsatornás képekkel dolgozhatunk tovább.

Színes képet csatornák egyesítésével kaphatunk, amit az OpenCV merge() függvénye biztosít:

imgc2 = cv2.merge((b, g, r))

A látszat ellenére a függvénynek egy paramétere van, a csatornák felsorolása tuple objektumként, emiatt kell kettős zárójelezés, ahogyan a színkódolás mutatja.

Színcsatornák elemzése

Eredeti, BGR reprezentációjú színes fotó.

Vörös színcsatorna szürkeárnyalatos képként megjelenítve.

A képen a vörös árnyalatok dominálnak, emiatt a kép nagy részén magas a vörös intenzitásérték.

Zöld színcsatorna szürkeárnyalatos képként megjelenítve.

A kanapé vörös színének előállításában nem vesz részt számottevően.

A macska szürke, és a sál sárga színében viszont igen.

Kék színcsatorna szürkeárnyalatos képként megjelenítve.

A kék szín leginkább a macska szürke színének előállításában játszik szerepet. A többi objektum esetén az intenzitása emiatt alacsony.

Színes kép a vörös csatorna kinullázása után.

A vörös szín nem jelenik meg a színképzésben. A kanapé emiatt sötét tónusban jelenik meg.

A macska szürke színe ciánkékes árnyalatot kap a kék és zöld komponensek miatt.

A kendő sárga színe zöldre változik. (A sárga szín a vörös és a zöld keverékéből áll elő.)

BGR → CIRLab konverzió utáni L csatorna szürkeárnyalatos képként megjelenítve.

Ez a csatorna a szürkeárnyalatos (luminancia) képet adja, megegyezik a szürkeárnyalatos konverzió eredményével.

BGR → CIRLab konverzió utáni a csatorna szürkeárnyalatos képként megjelenítve.

Kromatikus csatorna, a színdefinícióban játszik szerepet.

BGR → CIRLab konverzió utáni b csatorna szürkeárnyalatos képként megjelenítve.

Kromatikus csatorna, a színdefinícióban játszik szerepet.

02_03_ocv_split_merge.py

# OpenCV2 képbeolvasás, színtér konverzió
# OpenCV online dokumentáció: https://docs.opencv.org/4.5.5/de/d25/imgproc_color_conversions.html

# Modul definíciók importálása
import cv2


# Kép beolvasása fájlból
imgc = cv2.imread('GolyoAlszik_rs.jpg', cv2.IMREAD_COLOR)

cv2.imshow('color', imgc)

# Szürkeárnyalat
imgr = cv2.cvtColor(imgc, cv2.COLOR_BGR2GRAY)

cv2.imshow('grayscale', imgr)
cv2.waitKey(0)

# Színcsatornákra bontás és megjelenítés
b, g, r = cv2.split(imgc)

cv2.imshow('red', r)
cv2.imshow('green', g)
cv2.imshow('blue', b)
cv2.waitKey(0)

# Vörös csatorna nullázása és BGR kép előállítása
r[:, :] = 0
imgc2 = cv2.merge((b, g, r))

cv2.imshow('0,g,b', imgc2)
cv2.waitKey(0)

# Színcsatorna ablakok bezárása
cv2.destroyWindow('red')

cv2.destroyWindow('green')
cv2.destroyWindow('blue')
cv2.destroyWindow('0,g,b')

# Áttérés Lab színtérbe
# L: szürkeárnyalat
# a, b: kromatikusok (szín információ)
imgLab = cv2.cvtColor(imgc, cv2.COLOR_BGR2Lab)

L, a, b = cv2.split(imgLab)
cv2.imshow('L', L)
cv2.imshow('a', a)
cv2.imshow('b', b)
cv2.waitKey(0)