Skip navigation

Interaktív paraméterállítás

Trackbar

Az OpenCV csúszka (trackbar) vezérlőelemet biztosít számunkra, amit interaktív paraméterállításra használhatunk. A módosítást saját függvénnyel kezelhetjük.

  • A vezérlőelemet egy már létező ablakhoz tudjuk rendelni. Egy ablakhoz akár többet is hozzáadhatunk.
  • A csúszkák az ablak tetején jelennek meg.
  • A csúszka vizuálisan egy rövid szöveges megnevezésből, mellette az aktuális számértékkel, egy alsó vízszintes mérce beosztással és egy mozgatható csúszka szimbólumból áll.
  • A csúszka értékei csak egész számok lehetnek.
  • Alapértelmezésként 0 értéktől a létrehozó függvényben megadott értékig terjed.

Utólagosan, már létrehozott csúszka objektum esetén lehetőségünk van az alábbiakra.

  • Módosíthatjuk a csúszka minimális értékét. Ez csak egész szám lehet, és nullánál nem lehet kisebb!
  • Módosíthatjuk a csúszla maximális értékét. Ez is csak egész szám lehet, és a minimumnál nagyobb.
  • Lekérhetjük a csúszka aktuális értékét.

Mint látható, nincs lehetőség negatív számtartomány, valamint tört számok megadására. Ezt utólagos átalakításokkal korrigálhatjuk, vagy használhatjuk a jóval fejlettebb Qt könyvtárat a felhasználói felület felépítésére.

Használata

A createTrackbar() függvény fejléce:

cv2.createTrackbar(trackbarName, windowName, value, count, onChange)

trackbarName Szöveg sztring, ami megjelenik a csúszka bal oldalán. Beazonosíthatjuk, melyik paramétert állítja, amennyiben több ilyen vezérlő is hozzárendelésre kerül egy ablakhoz.
windowName Trackbar vezérlőelemet egy előzetesen már létrehozott ablakhoz rendelhetünk hozzá.
value Mi legyen a kezdeti paraméterérték.
count Mi legyen a maximális értéke a csúszkának.
Fontos megszorítás, hogy a számlálás csak egyesével, egész értékenként történhet! Alapértelmezés szerint csak nullával kezdődhet, ami további függvényhívásokkal módosítható.
onChange Egy saját függvényünk neve, amelyet akkor hív meg a rendszer, ha mozgatjuk a csúszkát. A függvény paraméterként megkapja a paraméter aktuális értékét.

A setTrackbarMin() és setTrackbarMax() függvények működése teljesen analóg.

cv2.setTrackbarMin(trackbarName, windowName, value)

cv2.setTrackbarMin(trackbarName, windowName, value)

Az első két paraméter megegyezik a createTrackbar() függvénynél látottakkal. A value az új minimális és maximális csúszka értéket adja meg.

A getTrackbarPos() és a setTrackbarPos() függvények az aktuális csúszka értéket adják vissza, illetve módosítják, értelemszerűen.

pos = cv2.getTrackbarPos(trackbarName, windowName)

cv2.getTrackbarPos(trackbarName, windowName, value)

D_01_trackbar.py

A példaprogram két csúszkás paraméterbeállítót helyez el az ablak felső részében. Mindkettő önálló kezelőfüggvényt kap. A második esetben azt mutatjuk be, hogyan lehet az OpenCV csúszka erős megszorításai mellett [-0.5, 0.5] közötti paraméterértékeket kapni, 0.01 léptékkel. Ebben az esetben célszerű a felhasználót tájékoztatni a ténylegesen használt paraméter értékről, például a konzolra írással!

Egy billentyű lenyomása után a param2 csúszka minimális, maximális és aktuális értékei programozottan megváltoznak. Ez látható a csúszka beosztásán is.

import cv2


def onParam1Trackbar(x):
print("=============================")
print('param1 csúszka pozíció:', x)


def onParam2Trackbar(x):
print("=============================")
print('param2 csúszka pozíció:', x)
param = (x - 50) / 100
print('Átalakított paraméter érték: {}'.format(param) )



im = np.ndarray((200, 640, 3), np.uint8)
im.fill(192)
cv2.imshow('window', im)


cv2.createTrackbar('param1', 'window', 5, 10, onParam1Trackbar)
cv2.createTrackbar('param2', 'window', 50, 100, onParam2Trackbar)
cv2.waitKey(0)

cv2.setTrackbarMin('param2', 'window', 20)
cv2.setTrackbarMax('param2', 'window', 50)
cv2.setTrackbarPos('param2', 'window', 30)
pos = cv2.getTrackbarPos('param2', 'window')

print('Trackbar pozíció:', pos)

cv2.waitKey(0)
cv2.destroyAllWindows()