• Python机器视觉--OpenCV入门--鼠标事件与TrackBar控件(含小项目:OpenCV调色板)


    1.鼠标事件与TrackBar控件

    1.1控制鼠标

    OpenCV允许我们对窗口上的鼠标动作做出响应.

    • setMouseCallback(winname, callback, userdata) winname是窗口的名字, callback是回调函数, userdata是给回调函数的参数.

    • callback(event, x, y, flags, userdata)回调函数必须包含这5个参数. event是事件(鼠标移动, 左键, 右键等), x,y是点鼠标的坐标点, flags主要用于组合键, userdata就是上面的setMouseCallback的userdata

      鼠标事件:

      • EVENT_MOUSEMOVE 0 鼠标移动
      • EVENT_LBUTTONDOWN 1 按下鼠标左键
      • EVENT_RBUTTONDOWN 2 按下鼠标右键
      • EVENT_MBUTTONDOWN 3 按下鼠标中键
      • EVENT_LBUTTONUP 4 左键释放
      • EVENT_RBUTTONUP 5 右键释放
      • EVENT_MBUTTONUP 6 中键释放
      • EVENT_LBUTTONDBLCLK 7 左键双击
      • EVENT_RBUTTONDBLCLK 8 右键双击
      • EVENT_MBUTTONDBLCLK 9 中键双击
      • EVENT_MOUSEWHEEL 10 鼠标滚轮上下滚动
      • EVENT_MOUSEHWHEEL 11 鼠标左右滚动

      flags:

      • EVENT_FLAG_LBUTTON 1 按下左键
      • EVENT_FLAG_RBUTTON 2 按下右键
      • EVENT_FLAG_MBUTTON 4 按下中键
      • EVENT_FLAG_CRTLKEY 8 按下ctrl键
      • EVENT_FLAG_SHIFTKEY 16 按下shift键
      • EVENT_FLAG_ALTKEY 32 按下alt键
    import cv2
    import numpy as np
    
    
    def mouse_callback(event, x, y, flags, userdata):
        print(event, x, y, flags, userdata)
        
    cv2.namedWindow('mouse', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('mouse', 640, 360)
    
    # 设置鼠标回调函数
    cv2.setMouseCallback('mouse', mouse_callback, '123')
    
    # 显示窗口和背景
    # 生成全黑的图片
    img = np.zeros((360, 640, 3), np.uint8)
    while True:
        cv2.imshow('mouse', img)
        key = cv2.waitKey(1)
        if key & 0xFF == ord('q'):
            break
            
    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

    1.2 TrackBar控件

    TrackBar控件

    • createTrackbar(trackbarname, winname, value, count, onChange) 创建TrackBar控件, value为trackbar的默认值, count为bar的最大值, 最小为0
    • getTrackbarPos(trackbarname, winname) 获取TrackBar当前值

    2.小项目:使用鼠标事件和TrackBar控件 实现调色板

    ## trackbar
    import cv2
    import numpy as np
    
    # 创建窗口
    cv2.namedWindow('trackbar', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('trackbar', 640, 480)
    # 定义回调函数
    def callback(value):
        print(value)
    
    # 创建trackbar
    cv2.createTrackbar('R', 'trackbar', 0, 255, callback)
    cv2.createTrackbar('G', 'trackbar', 0, 255, callback)
    cv2.createTrackbar('B', 'trackbar', 0, 255, callback)
    
    # 创建一个背景图片
    img = np.zeros((480,640,3), np.uint8)
    
    while True:
        # 获取当前trackbar的值
        r = cv2.getTrackbarPos('R', 'trackbar')
        g = cv2.getTrackbarPos('G', 'trackbar')
        b = cv2.getTrackbarPos('B', 'trackbar')
        
        # 改变背景图颜色
        img[:] = [b, g, r]
        cv2.imshow('trackbar', img)
        
        key = cv2.waitKey(1)
        if key & 0xFF == ord('q'):
            break
            
    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

    运行后如图所示
    在这里插入图片描述
    我们尝试调整颜色
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    RGB三原色均可以正确显示,我们尝试任意组合一个颜色
    在这里插入图片描述

  • 相关阅读:
    (JAVA)[COCI2006-2007#2] ABC
    深入学习JS:作用域与执行上下文
    人员离岗自动识别系统
    海光信息三季报营业收入39.43亿元,同比增长3.22%
    Mit6.006-lecture04-Hashing
    【每周研报复现】基于阻力支撑相对强度(RSRS)的市场择时
    开发上门送桶装水小程序要考虑哪些业务场景
    大模型基本概念学习 - Checkpoint、PyTorch、 TensorFlow、Transformers、ModelScope
    额外的迭代器
    TiUP 术语及核心概念
  • 原文地址:https://blog.csdn.net/qq_43944517/article/details/126206697