文章目录

  • 所有相关接口验证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()