Skip navigation

Egéresemények kezelése

Egéresemény hozzárendelése ablakhoz

Egy korábban létrehozott ablakhoz egy egéresemény-kezelőt kapcsolunk az alábbi módon:

cv2.setMouseCallback('window_name', mouse_click)

Ha a window_name nevű ablakban kattintunk vagy mozgunk az egérrel, akkor a rendszer meghívja a mouse_click() függvényünket.

Ez a függvény megkapja a rendszertől az egéresemény típusát (event), a kattintás ablakkoordinátáit, ami megegyezik a kép indexelési koordinátáival (x, y). Az utolsó két paramétert nem használjuk. A lehetséges egéresemény értékeket az alábbi táblázat foglalja össze.

event Leírás
EVENT_LBUTTONDOWN
EVENT_RBUTTONDOWN
EVENT_MBUTTONDOWN
Bal, jobb, középső egérgomb lenyomása.
EVENT_LBUTTONUP
EVENT_RBUTTONUP
EVENT_MBUTTONUP
Bal, jobb, középső egérgomb felengedése.
EVENT_MOUSEMOVE Egér mozgatás ablakban.
EVENT_LBUTTONDBLCLK
EVENT_RBUTTONDBLCLK
EVENT_MBUTTONDBLCLK
Dupla kattintás esemény a bal, jobb, középső egérgombbal.
EVENT_MOUSEWHEEL
EVENT_MOUSEHWHEEL
Egérgörgők használata.

C_01_mouse.py

Az összetettebb példaprogramunk egy képet tölt be és készít róla másolatot. A bal egérgomb lenyomásakori koordinátát feljegyezzük, ez lesz a vonalunk kezdőpontja. Lenyomott bal egérgomb melletti egér mozgás a vonal végpontját adja. A vonalat be is rajzoljuk a képmátrixba és frissítjük a kijelzőt. A bal egégomb felengedésekor befejezzük a vonal rajzolását. A vörös színű programsorok mutatják az egérkezeléssel kapcsolatos utasításokat.


import cv2

start_x = start_y = -1
button_down = False


def mouse_event(event, x, y, flags, param):

global start_x, start_y, button_down, im

print('x, y:', x, y)

if event == cv2.EVENT_LBUTTONDOWN:
start_x = x
start_y = y
button_down = True

if event == cv2.EVENT_MOUSEMOVE:

if button_down:
im = im_orig.copy()
cv2.line(im, (start_x, start_y), (x, y), (0, 0, 255), 3)
cv2.imshow('image', im)

if event == cv2.EVENT_LBUTTONUP:
start_x = start_y = -1
button_down = False


im = cv2.imread('OpenCV-logo.png', cv2.IMREAD_COLOR)

im_orig = im.copy()
cv2.imshow('image', im)

cv2.setMouseCallback('image', mouse_event)

cv2.waitKey(0)