What should be the arguments of cv2.setMouseCallback() What should be the arguments of cv2.setMouseCallback() numpy numpy

What should be the arguments of cv2.setMouseCallback()


  1. You don't call draw_circle, openCV will call it for you on a mouse event with the proper event and coordinates, you just specify which function to be called for what window in setMouseCallback

  2. if you need additional variables you can send them via param

  3. You can have multiple windows with a different mouse action set for each one

I hope this example can be helpful for someone who stumbles across :

import cv2import numpy as npfrom math import sqrtdef calc_distance(p1, p2):    (x1, y1) = p1    (x2, y2) = p2    return round(sqrt((x1-x2)**2 + (y1-y2)**2))# param contains the center and the color of the circle def draw_red_circle(event, x, y, flags, param):    if event == cv2.EVENT_LBUTTONDBLCLK:        center = param[0]        radius = calc_distance((x, y), center)        cv2.circle(img, center, radius, param[1], 2)def draw_blue_circle(event, x, y, flags, param):    if event == cv2.EVENT_LBUTTONDBLCLK:        center = (100,100)        radius = calc_distance((x, y), center)             cv2.circle(img, center, radius, (255, 0, 0), 2)img = np.zeros((512,512,3), np.uint8)# create 2 windowscv2.namedWindow("img_red")cv2.namedWindow("img_blue")# different doubleClick action for each window# you can send center and color to draw_red_circle via paramparam = [(200,200),(0,0,255)]cv2.setMouseCallback("img_red", draw_red_circle, param)cv2.setMouseCallback("img_blue", draw_blue_circle) # param = Nonewhile True:    # both windows are displaying the same img    cv2.imshow("img_red", img)    cv2.imshow("img_blue", img)    if cv2.waitKey(1) & 0xFF == ord("q"):        breakcv2.destroyAllWindows()