A harmadik példaprogram a gamma-paraméter interaktív állítási lehetőségét biztosítja. A képet megjelenítő ablak tetején megjelenő csúszka (trackbar) segítségével dolgozhatunk. A képi eredmény rögtön megjelenik, valamint külön ablakban a gamma-korrekciós grafikont is láthatjuk.
Az OpenCV csúszka használati lehetőségeit külön ismertetjük. Kiemeljük, hogy ennek a vezérlőnek nagyon limitált a tudása. Csak egész számokat kaphatunk paraméterként, valamint csak 0-tól kezdődhet a paraméter értékek megadása. Emiatt sokszor, mint a jelen példában is, át kell alakítanunk a paraméter értéket.
Csúszka objektum létrehozása egy megjelenítő ablakhoz az alábbi. A Gamma nevű ablak felső részén jelenik meg egy Parameter nevű vezérlőelem. Értéke [0, 80] tartományban választható, egyesével, egész értékekként. A csúszka a középső, 40 értékre kerül indításkor. Az ennek megfelelő hatást érvényesítjük is az ontrackbar() kezelőfüggvény meghívásával.
cv2.createTrackbar('Parameter', 'Gamma', 40, 80, ontrackbar)
ontrackbar(40)
A csúszka aktuális értéke tehát 0 és 80 közötti lehet. Mi azt szeretnénk, ha az ebből számolt gamma korrekciós paraméter a csúszka felső tartományában (40 feletti csúszka értékekre) 1 feletti értéket adna 0.1 léptékkel. Az alsó részben pedig a 40 feletti "párjának" a reciprok értéke szerepelne. A gamma értékek így 1 / 5.0 = 0.2 és 5.0 közöttiek lesznek.
Az egy tizedes léptéket elérjük, ha a csúszka aktuális értékét (pos) elosztjuk 10-zel. A 40-es középső értékből így 4 lesz. Ezt 1 értékre szeretnénk állítani, vagyis kivonunk 3-at. Ha az így kapott érték 1 feletti, akkor rendben is vagyunk. 1 alatt reciprok értéket szerenénk kapni. Ha ebből még 2-t kivonunk, -1-től csökkenő értéket kapunk egészen -5-ig, aminek vesszük a reciptok értékét, és ellenkező előjelűre állítjuk az eredményt. A függvény további része megegyezik az előzőkkel: definiáljuk a gamma-korrekció keresőtábláját és végrehajtjuk a képre az intenzitásértékek cseréjét.
def ontrackbar(pos):
global img
gamma = (pos / 10.0) - 3
if gamma < 1:
gamma = -1.0 / (gamma - 2.0)
lut = create_gamma_lut(gamma)
applyLUT(img, lut, 'γ={0:2.2f}'.format(gamma))
A ténylegesen felhasznált paraméter értéket tájékoztatásul kiírjuk a konzolra.
Ha jobban használható felhasználó felületet szeretnénk a programunkhoz készíteni, akkor javasolt például a PyQt5 Python csomag használata, ami a népszerű Qt5 függvénykönyvtár funkcióit teszi elérhetővé. Több példához is adunk ilyen implementációt a későbbiekben.