文章目录
- 所有相关接口验证demo以上传至仓库
- 鼠标事件接口
- 鼠标事件类型
- 鼠标事件Demo
- 滑动条接口
- 滑动条Demo
所有相关接口验证demo以上传至仓库
代码地址:https://gitee.com/norep/learn-opencv
鼠标事件接口
cv2.setMouseCallback 是 OpenCV 库中的一个函数,用于设置鼠标事件的处理函数。当你想在处理图像时响应用户的鼠标操作(比如点击、拖动等)时,这个函数非常有用。
cv2.setMouseCallback(window_name, callback, param=None)
参数说明:
- window_name:一个字符串,表示要绑定鼠标事件的窗口名称。
- callback:一个函数名,当鼠标事件发生时,这个函数将被调用。回调函数应该接受以下参数:
- param:一个可选参数,可以在调用 setMouseCallback 时传递给回调函数。这个参数将被传递给回调函数。
callback函数的参数
- event:鼠标事件的类型,比如 cv2.EVENT_LBUTTONDOWN 表示左键按下。
- x:鼠标事件的 x 坐标。
- y:鼠标事件的 y 坐标。
- flags:鼠标事件的附加标志,比如键盘修饰符的状态。
- param:一个可选的参数,可以在调用 setMouseCallback 时传递给回调函数。
注意:
cv2.setMouseCallback 只对 OpenCV 创建的窗口有效。
鼠标事件类型可以在 OpenCV 中找到,例如 cv2.EVENT_LBUTTONDOWN、cv2.EVENT_RBUTTONDOWN、cv2.EVENT_MOUSEMOVE 等。
回调函数将在单独的线程中执行,因此需要注意线程安全问题。
鼠标事件类型
cv2.EVENT_MOUSEMOVE:鼠标移动。
cv2.EVENT_LBUTTONDOWN:鼠标左键按下。
cv2.EVENT_RBUTTONDOWN:鼠标右键按下。
cv2.EVENT_MBUTTONDOWN:鼠标中键按下。
cv2.EVENT_LBUTTONUP:鼠标左键释放。
cv2.EVENT_RBUTTONUP:鼠标右键释放。
cv2.EVENT_MBUTTONUP:鼠标中键释放。
cv2.EVENT_LBUTTONDBLCLK:鼠标左键双击。
cv2.EVENT_RBUTTONDBLCLK:鼠标右键双击。
cv2.EVENT_MBUTTONDBLCLK:鼠标中键双击。
cv2.EVENT_FLAG_LBUTTON:鼠标左键按下标志。
cv2.EVENT_FLAG_RBUTTON:鼠标右键按下标志。
cv2.EVENT_FLAG_MBUTTON:鼠标中键按下标志。
cv2.EVENT_FLAG_CTRLKEY:Ctrl 键按下标志。
cv2.EVENT_FLAG_SHIFTKEY:Shift 键按下标志。
cv2.EVENT_FLAG_ALTKEY:Alt 键按下标志。
鼠标事件Demo
import cv2
import numpy as np
# 鼠标回调函数
def mouse_callback(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
print("Left button clicked at ({}, {})".format(x, y))
# 创建一个窗口
cv2.namedWindow("Image")
# 设置鼠标回调
cv2.setMouseCallback("Image", mouse_callback)
# 显示一个图像
image = np.zeros((480, 640, 3), dtype=np.uint8)
cv2.imshow("Image", image)
# 等待按键,然后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
滑动条接口
用于在 OpenCV 创建的窗口中创建一个滑动条(trackbar),用户可以通过滑动条来调整某些参数。这个功能在实时调整算法参数或图像处理时非常有用。
cv2.createTrackbar(trackbar_name, window_name, value, count, onChange)
参数说明:
- trackbar_name:一个字符串,表示滑动条的名称。这个名称将在窗口中显示。
- window_name:一个字符串,表示要添加滑动条的窗口的名称。
- value:一个整数,表示滑动条的初始值。
- count:一个整数,表示滑动条的最大值。
- onChange:回调函数,当滑动条值发生变化时会被调用。这个回调函数应该接受一个参数,即滑动条的新值。
注意:
cv2.createTrackbar只对 OpenCV 创建的窗口有效。
滑动条值的变化会触发回调函数,但回调函数是在主线程中执行的,因此如果回调函数中有耗时的操作,可能会导致界面冻结。在这种情况下,可以考虑使用多线程或异步处理。
滑动条Demo
import time
import cv2
import numpy as np
def trackbarCallback(value):
print(value)
windowName = "mouse"
cv2.namedWindow(windowName, cv2.WINDOW_NORMAL)
cv2.resizeWindow(windowName, 480, 640)
cv2.createTrackbar('R', windowName, 0, 255, trackbarCallback)
cv2.createTrackbar('G', windowName, 0, 255, trackbarCallback)
cv2.createTrackbar('B', windowName, 0, 255, trackbarCallback)
cv2.setTrackbarPos('R', windowName, 128)
cv2.setTrackbarPos('G', windowName, 128)
cv2.setTrackbarPos('B', windowName, 128)
img = np.zeros((480, 640, 3), np.uint8)
while True:
r = cv2.getTrackbarPos('R', windowName)
g = cv2.getTrackbarPos('G', windowName)
b = cv2.getTrackbarPos('B', windowName)
img[:] = [b, g, r]
cv2.imshow(windowName, img)
if cv2.waitKey(10) == ord('q'):
break
print('销毁窗口')
cv2.destroyAllWindows()