• OpenCV-交互相关接口


    所有相关接口验证demo以上传至仓库

    代码地址:https://gitee.com/norep/learn-opencv

    鼠标事件接口

    cv2.setMouseCallback 是 OpenCV 库中的一个函数,用于设置鼠标事件的处理函数。当你想在处理图像时响应用户的鼠标操作(比如点击、拖动等)时,这个函数非常有用。

    cv2.setMouseCallback(window_name, callback, param=None)
    
    • 1

    参数说明:

    • 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 键按下标志。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    鼠标事件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()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    滑动条接口

    用于在 OpenCV 创建的窗口中创建一个滑动条(trackbar),用户可以通过滑动条来调整某些参数。这个功能在实时调整算法参数或图像处理时非常有用。

    cv2.createTrackbar(trackbar_name, window_name, value, count, onChange)
    
    • 1

    参数说明:

    • 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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
  • 相关阅读:
    软件测试架构师的知识能力模型
    oracle10g的dataguard测试
    【企业架构】现代企业架构方法——第 1 章
    vue实现active点击切换样式
    Linux安装jdk的详细步骤
    基于51单片机气体检测报警系统-proteus仿真-源程序
    【ZYNQ】zynq启动模式及程序固化
    OpenAI开发者大会大模型圈开卷AI Agent? 实在智能布局前瞻已下“先手棋”
    ES Query DSL-复合查询和关联查询
    Java Math toIntExact() 使用方法及示例 long转int
  • 原文地址:https://blog.csdn.net/qq_41830158/article/details/136631772