Függvényt definiálni a def kulcsszóval tudunk. Meg kell adnunk a függvény nevét, zárójelek között pedig a paraméterlistát. A definíciót a kettőspont karakterrel kell lezárni.
Az egérkattintás kezelő függvényben számunkra az első három paraméter érdekes. Az event az egéresemény azonosítóját jelenti, az x és y pedig az ablakban megjelenő képen történt kattintás koordinátáját. Figyeljünk arra, hogy mivel ez OpenCV függvény, itt az első érték az x, vagyis az oszlop koordináta!
A függvény törzsét kötelező egy behúzásnyira (TAB, 4 szóköz, ...) illeszteni, egyébként szintaktikai hibát kapunk!
Ha függvényben használunk globális változókat, akkor fel kell őket sorolnunk a függvény elején a global kulcsszó után.
A bal egérgomb lenyomásakor a függvényben kiírjuk a képmátrix adott sorában és oszlopában szereplő értéket, ami skalár számérték (szürkeárnyalatos), vagy három elemű tömb (BGR képmátrix) is lehet.
Ezután megvizsgáljuk, hogy a dimenziók száma 3 értékű-e? Ha igen, ez azt jelenti, hogy egy kétdimenziós, de többcsatornás képünk van. Egycsatornás kép esetén ez az érték 2 a sor és oszlop dimenzióknak megfelelően. Ha többcsatornás a kép, akkor 2-es indexű csatorna értékét (a vöröset) is kiírjuk a konzolra.
A program jelenlegi változatában nem lenne szükséges az imshow újbóli hívása, de mivel gyakran az interaktív esemény hatására változik a képi tartalom is, és az csak akkor jelenik meg az ablakban, ha explicit frissítjük annak tartalmát, nem árt, ha megszokjuk, hogy szükség lehet rá.
A főprogramunk a kép betöltése után kiírja annak fontosabb attribútum értékeit, és elindítja az egérkezelést.
import cv2
def mouse_click(event, x, y, flags, param):
# Globalis valtozo atvetele
global im
if event == cv2.EVENT_LBUTTONDOWN:
# (x, y) színérték kiírása
print('Pixel = ', im[y, x])
# Ha 3 csatornás a kép
if im.ndim == 3:
print('R = ', im[y, x, 2])
cv2.imshow('im', im)
im = cv2.imread('OpenCV-logo.png', cv2.IMREAD_COLOR)
# im = cv2.imread('OpenCV-logo.png', cv2.IMREAD_GRAYSCALE)
print('Kép indexelhető dimenziói: ', im.ndim)
print('Kép mérete:', im.shape)
print('Kép pixeltípusa: ', im.dtype)
cv2.imshow('im', im)
# Egerkezelo callback fuggveny beallitasa az ablakhoz
cv2.setMouseCallback('im', mouse_click)
# Kilepes billentyunyomasra
cv2.waitKey(0)
cv2.destroyAllWindows()