import cv2
from functools import partial
def custom_mouse_callback(event, x, y, flags, param, custom_param):
if event == cv2.EVENT_LBUTTONDOWN:
print("Mouse clicked at ({}, {}) with custom parameter: {}".format(x, y, custom_param))
# 自定义参数
custom_param = "My Custom Parameter"
# 创建窗口和图像
image = cv2.imread("your_image.jpg")
cv2.namedWindow("My Window")
# 使用 functools.partial 创建回调函数
callback_with_custom_param = partial(custom_mouse_callback, custom_param=custom_param)
# 设置回调函数
cv2.setMouseCallback("My Window", callback_with_custom_param)
# 显示图像并等待用户操作
cv2.imshow("My Window", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
如果你想向 mouse_callback
函数传递自定义的参数,可以使用 Python 的 functools.partial
函数或 lambda 函数来实现。这允许你在回调函数中访问额外的参数。
在上述示例中,custom_mouse_callback
函数接受额外的参数 custom_param
,并在鼠标左键点击事件时打印出该参数的值。functools.partial
用于创建一个新的回调函数 callback_with_custom_param
,其中 custom_param
是自定义参数的值。然后,我们使用 cv2.setMouseCallback
将新的回调函数与窗口关联。
这样,当用户在窗口上执行鼠标事件时,custom_mouse_callback
函数将被调用,并可以访问自定义参数 custom_param
。
注意:回调函数之所以叫回调函数,是因为一开始不执行,直到我们触发相关事件才调用该函数,每触发一次调用一次